跳到主要内容

打断事件处理

使用融云 RTCLib 进行会议或直播过程中,可能会收到系统来电、应用切后台等打断事件,开发者需根据业务场景自行处理打断事件。

本文以系统来电、切后台为例,介绍如何处理打断事件。其他打断事件处理,如第三方应用语音通话、弹出闹钟等,开发者需根据具体情况注册相应监听,结合业务特性选择合适时机处理音频打断。

系统来电

监听来电事件

开发者根据业务场景,选择合适的时机,在 App 层注册来电监听。一般在发起音频通话页面的 onCreate() 方法中设置。

处理音频打断

提示
  1. 收到音频打断时,调用 RCRTCEngine 中的 pauseAudioModule() 方法,暂停音频设备。
  2. 音频打断恢复后,调用 RCRTCEngine 中的 resumeAudioModule() 方法,恢复音频设备。
/** 暂停音频设备模块 用于需要暂停音频设备模块的场合,例如来电时 */
public abstract void pauseAudioModule();

/** 恢复音频设备模块 用于需要恢复音频设备模块的场合,例如通话结束时 */
public abstract void resumeAudioModule();

移除来电事件监听

注册来电监听事件后,不需要时应及时移除监听事件,否则会造成内存泄漏甚至引起未知错误。一般在发起音频通话页面的 onDestroy() 方法中移除。

/**
* 注销电话状态监听
*/
private void unregisterYourPhoneCallingListener() {
TelephonyManager tm = (TelephonyManager) getSystemService(Service.TELEPHONY_SERVICE);
tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
mPhoneStateListener = null;
}

切后台

支持后台播放

默认情况下,应用切后台时,音频模块不会停止工作,不需要做任何特殊处理。除非系统在做内存回收时,将应用强制退出,此时音频模块也会停止工作。

停止后台播放

提示

5.3.2 及之后版本,如果想在应用切到后台后停止/恢复音频模块,开发者需要主动调用 pauseAudioModuleresumeAudioModule 来实现暂停、恢复音频模块功能。

旧版 SDK 处理音频打断的方案(SDK < 5.3.2)

收到音频打断时,开发者需调用指定方法处理远端及本地的媒体流。

  1. 静音远端音频流:调用 RCRTCRoom 中的 muteAllRemoteAudio 方法,设置为 true,静音远端所有流。详见音量中「静音全部远端音频流」方法。
  2. 处理本地音频流,可以选任一种方式:
    • 静音本地音频流:调用 RCRTCStream 接口提供的 mute(boolean mute) 方法,设置为 true,静音本地音频流。静音后,不再发送本地资源,也不能播放,但不影响音频数据采集。详见音量中对应介绍。
    • 关闭麦克风:调用 RCRTCMicOutputStream 中的 setMicrophoneDisable 方法,设置为 true,关闭麦克风。详见麦克风中对应介绍。
    • 取消发布本地默认音视频流:会议场景下调用 RCRTCLocalUser 中的 unpublishDefaultStreams 取消发布默认音视频流。直播场景下需调用 unpublishDefaultLiveStreams 方法。详见「音视频会议」/「低延迟直播」中发布资源相关介绍。

音频打断恢复后,调用指定方法恢复远端及本地的媒体流。

  1. 取消远端音频流静音:调用 RCRTCRoom 中的 muteAllRemoteAudio 方法,设置为 false,取消远端音频流静音。
  2. 恢复本地音频流:请参考处理本地音频流中选用的方式进行恢复。