打断事件处理
使用融云 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
来实现暂停、恢复音频模块功能。