跳到主要内容

打断事件处理

使用融云 RTCLib 进行会议或直播时,可能会遇到系统来电、应用切后台等打断事件。请根据业务场景妥善处理。 本文以“系统来电、切后台”为例进行说明。对于第三方语音通话、闹钟弹窗等其他打断场景,请根据实际情况注册相应监听,并结合业务选择合适时机处理音频打断。

系统来电

监听来电事件

请根据业务场景在 App 层注册来电监听。一般建议在发起音频通话页面的 onCreate() 方法中设置。

处理音频打断

提示
  1. 收到音频打断时,调用 RCRTCEnginepauseAudioModule() 暂停音频设备。
  2. 打断恢复后,调用 RCRTCEngineresumeAudioModule() 恢复音频设备。
Java
/**
* 暂停音频设备模块:用于需要暂停音频设备模块的场景(例如来电时)
*/
public abstract void pauseAudioModule();

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

移除来电事件监听

注册来电监听后,不需要时请及时移除,以避免内存泄漏或未知错误。一般建议在发起音频通话页面的 onDestroy() 方法中移除。

Java
/**
* 注销电话状态监听
*/
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. 静音远端音频流:调用 RCRTCRoommuteAllRemoteAudio 设置为 true 静音全部远端音频流。详见音量中的“静音全部远端音频流”。
  2. 处理本地音频流(任选其一):
    • 静音本地音频流:调用 RCRTCStreammute 设置为 true 静音本地音频流。静音后不再发送本地资源,也不能播放,但不影响音频数据采集。详见音量
    • 关闭麦克风:调用 RCRTCMicOutputStreamsetMicrophoneDisable 设置为 true 关闭麦克风。详见麦克风
    • 取消发布本地默认音视频流:
      • 会议场景:调用 RCRTCLocalUserunpublishDefaultStreams()
      • 直播场景:调用 RCRTCLocalUserunpublishDefaultLiveStreams()。 详见“音视频会议”“低延迟直播”发布资源相关内容。

打断恢复后,调用相应方法恢复远端与本地媒体流:

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