打断事件处理
使用融云 RTCLib 进行会议或直播时,可能会遇到系统来电、应用切后台等打断事件。请根据业务场景妥善处理。 本文以“系统来电、切后台”为例进行说明。对于第三方语音通话、闹钟弹窗等其他打断场景,请根据实际情况注册相应监听,并结合业务选择合适时机处理音频打断。
系统来电
监听来电事件
请根据业务场景在 App 层注册来电监听。一般建议在发起音频通话页面的 onCreate()
方法中设置。
处理音频打断
提示
- SDK 自 5.3.2 版本起提供暂停和恢复音频设备的 API(
pauseAudioModule
和resumeAudioModule
)。 - 如果您的 SDK 版本低于 5.3.2,可参考旧版 SDK 处理音频打断的方案(SDK < 5.3.2)。
- 收到音频打断时,调用
RCRTCEngine
的pauseAudioModule()
暂停音频设备。 - 打断恢复后,调用
RCRTCEngine
的resumeAudioModule()
恢复音频设备。
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;
}
切后台
支持后台播放
默认情况下,应用切到后台后,音频模块不会停止工作,无需额外处理。仅当系统在回收内存时强制退出应用时,音频模块才会随之停止。
停止后台播放
提示
- SDK 自 5.3.2 版本起提供暂停和恢复音频设备的 API(
pauseAudioModule
和resumeAudioModule
)。 - 如果您的 SDK 版本低于 5.3.2,可参考旧版 SDK 处理音频打断事件的方案(SDK < 5.3.2)。
在 5.3.2 及之后版本,若希望在应用切到后台后停止/恢复音频模块,请主动调用 pauseAudioModule
、resumeAudioModule
以实现暂停与恢复。
旧版 SDK 处理音频打断的方案(SDK < 5.3.2)
收到音频打断时,请调用以下方法处理远端及本地媒体流。
- 静音远端音频流:调用
RCRTCRoom
的muteAllRemoteAudio
设置为true
静音全部远端音频流。详见音量中的“静音全部远端音频流”。 - 处理本地音频流(任选其一):
- 静音本地音频流:调用
RCRTCStream
的mute
设置为true
静音本地音频流。静音后不再发送本地资源,也不能播放,但不影响音频数据采集。详见音量。 - 关闭麦克风:调用
RCRTCMicOutputStream
的setMicrophoneDisable
设置为true
关闭麦克风。详见麦克风。 - 取消发布本地默认音视频流:
- 会议场景:调用
RCRTCLocalUser
的unpublishDefaultStreams()
。 - 直播场景:调用
RCRTCLocalUser
的unpublishDefaultLiveStreams()
。 详见“音视频会议”“低延迟直播”发布资源相关内容。
- 会议场景:调用
- 静音本地音频流:调用
打断恢复后,调用相应方法恢复远端与本地媒体流:
- 取消远端音频流静音:调用
RCRTCRoom
的muteAllRemoteAudio
设置为false
。 - 恢复本地音频流:请参考处理本地音频流中选用的方式进行恢复。