Android判断直播结束,Android 直播打断事件处理

本文介绍了在使用ZegoLiveRoomSDK进行直播时如何处理来电等打断事件。通过监听电话状态,当来电时暂停音频模块,挂断时恢复,确保直播体验。同时提醒开发者注意在适当时候移除监听事件,防止内存泄漏。此外,还提到需关注其他打断事件如微信语音,并根据具体情况进行音频设备的暂停和恢复操作。
摘要由CSDN通过智能技术生成

打断事件处理

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 处理音频打断

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

音频打断发生时,暂停音频设备。

音频打断恢复后,恢复音频设备。

示例代码片段如下:

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 仅支持暂停/恢复音频设备,如果开发者想暂停视频,需直接调用停止推流、停止拉流接口,详见:初级功能指南-推流、初级功能指南-拉流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值