打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android 直播打断事件处理

打断事件处理


1 简介

使用 ZegoLiveRoom SDK 直播过程中,可能会被来电、切后台等事件打断,此时开发者需要处理打断事件。

SDK 提供了与音频打断事件相关的API,如下所示:

/** * 暂停设备模块。 * 用于需要暂停指定模块的场合,例如来电时暂定音频模块; * 暂停指定模块后,注意在合适时机下恢复模块 * * @param moduleType  设备类型, 参考 {@link ZegoConstants.ModuleType} 定义 * * @see #resumeModule(int) */public void pauseModule(int moduleType);
/** * 恢复设备模块。 * 用于需要恢复指定模块的场合,例如来电结束后恢复音频模块。 * * @param moduleType  设备类型, 参考 {@link ZegoConstants.ModuleType} 定义 * * @see #pauseModule(int) */public void resumeModule(int moduleType);

请注意,目前 moduleType 仅支持音频采集、播放设备,如果开发者想暂停视频,可直接调用停止推流、停止拉流接口,详见:初级功能指南-推流初级功能指南-拉流

本文以来电为例,讲述如何处理打断事件。

2 来电

2.1 监听来电事件

开发者需要在合适的位置,注册来电监听事件,一般在发起音频通话页面的 onCreate(Bundle) 方法中(但不仅限于这种方式)。

示例代码片段如下:

/** * 电话状态监听. */private void regisgerPhoneCallingListener() {    mPhoneStateListener = new ZegoPhoneStateListener();    TelephonyManager tm = (TelephonyManager) getSystemService(Service.TELEPHONY_SERVICE);    tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);}

2.2 处理音频打断

音频打断处理一般有两个步骤:

  1. 音频打断发生时,暂停音频设备。
  2. 音频打断恢复后,恢复音频设备。

示例代码片段如下:

private class ZegoPhoneStateListener extends PhoneStateListener {    @Override    public void onCallStateChanged(int state, String incomingNumber) {        super.onCallStateChanged(state, incomingNumber);        switch (state) {            case TelephonyManager.CALL_STATE_IDLE:                if (mHostHasBeenCalled) {                    mHostHasBeenCalled = false;                    recordLog(MY_SELF + ": call state idle");                    // 结束通话,恢复音频模块                    mZegoLiveRoom.resumeModule(ZegoConstants.ModuleType.AUDIO);                }                break;            case TelephonyManager.CALL_STATE_RINGING:                recordLog(MY_SELF + ": call state ringing");                mHostHasBeenCalled = true;                // 来电,暂停音频模块                mZegoLiveRoom.pauseModule(ZegoConstants.ModuleType.AUDIO);                break;            case TelephonyManager.CALL_STATE_OFFHOOK:                break;        }    }}

2.3 移除来电事件监听

开发者在注册了来电监听事件后,切不要忘记在不需要的时候,把监听事件从系统中移除,否则会造成内存泄漏甚至引起未知错误。一般在发起音频通话页面的 onDestroy() 方法中(但不仅限于这种方式)。

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

3 其它打断处理

除了上述来电打断事件外,开发者还需要考虑其它的打断事件,如微信语音通话等,此时开发者需要根据具体情况注册相应的系统监听/广播或者第三方应用的广播事件,以便在合适的时机暂停音频模块或恢复音频模块。因 Android 上此类事件较多,除了系统标准事件外,还有很多第三方 App 自定义的广播,无法一一描述处理方法,故请开发者结合自己 App 的特性,处理相应打断事件。

由于目前 SDK 仅支持暂停/恢复音频设备,如果开发者想暂停视频,需直接调用停止推流、停止拉流接口,详见:初级功能指南-推流初级功能指南-拉流

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
《Android模块化项目实战》07 无忧险写字字帖
Android MediaPlayer 基础简介
HTML5脚本编程:创新与交互的未来
Android网络连接判断与处理
监听Android手机的呼叫状态
android之通过phoneStateListener监听电话状态改变
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服