打断事件处理

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

Android判断直播结束,Android 直播打断事件处理相关推荐

  1. android+判断小米手机,android 判断手机为小米

    释放双眼,带上耳机,听听看~! 之前,自己写了获取相册图片的代码,在自己手机上测试没有问题,不过小米手机却出现问题.在网上搜索资料,发现小米手机与其他德 处理不同.所以今天写一下判断手机系统的内容.其 ...

  2. android+判断wifi+5g,Android判断wifi是5G还是2.4G

    我一开始看这帖子,找不到答案,为了后来的人,我来回复吧. WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_S ...

  3. android 判断miui版本,Android判断手机是否是小米MIUI系统的方法

    易采站长站为您分析Android判断手机是否是小米MIUI系统的方法的相关资料,需要的朋友可以参考下 废话不多说了,直接给大家贴代码了: 具体代码如下所示: public class MIUIUtil ...

  4. android 判断是否wifi,android 判断是否连接wifi

    场景:android判断是否连接wifi跟网络状态的判断 android判断是否连接wifi和网络状态的判断 // 是否连接WIFI public static boolean isWifiConne ...

  5. android 判断fragment类型,Android 判断当前Fragment是否可见(Visible)

    判断当前Fragment是否可见 public abstract class BaseFragment extends Fragment { /** Fragment当前状态是否可见*/ protec ...

  6. Android判断当前的android设备是否处于联网状态

    2019独角兽企业重金招聘Python工程师标准>>> 首先,要想获得当前android设备是否处于联网状态,那么android本身给我们提供了一个服务 private Connec ...

  7. android 判断安装微信,Android开发中判断手机是否安装了QQ或者微信

    下面一段代码给大家分享了android中判断手机是否安装了qq或者微信,代码简单易懂,非常不错,具有参考借鉴价值,需要的的朋友参考下吧 public static boolean isWeixinAv ...

  8. android 判断手机rom,Android判断手机ROM 手机os

    有时候需要判断手机系统的ROM,检测ROM是MIUI.EMUI还是Flyme,可以使用getprop命令,去系统build.prop文件查找是否有对应属性来判断是什么ROM. build.prop的介 ...

  9. android 判断双卡手机号码,android双卡机中判断当前使用的是那张卡的数据流量

    今天主要讲的是在android 5.1及以上如何判断双卡手机中判断当前的流量是使用的那张卡. (例子中的代码会使用到java反射的知识) 首先判断数据流量开关是否打开: /** * 判断数据流量开关是 ...

最新文章

  1. hadoop、spark/storm等大数据相关视频资料汇总下载
  2. 区块链BaaS云服务(10)用友iuap区块链平台
  3. 理解RTMP、HttpFlv和HLS的正确姿势
  4. java导出生成word(类似简历导出)
  5. ECharts学习(1)--简单图表的绘制
  6. 【华为云技术分享】云图说|全新华为云云备份服务:为您的数据提供三合一的保障
  7. mysql日志监控 zabbix_zabbix日常监控项mysql(七)
  8. iOS关于通知传值Bool类型的注意点
  9. FreeRADIUS 3.0安装配置
  10. 论傻瓜交换机接到有vlan的网管交换机为什么可以通信
  11. Vue笔记随笔---kalrry
  12. 机械设备行业专题研究:各家电池片技术路线差异几何?
  13. oracle 导出身份证号_oracle 根据身份证号计算出生日期
  14. 带你了解什么是MySQL数据库(六)索引原理,如何建立与使用索引
  15. 华为的云计算转型:逼出来的开放
  16. amoled led 排列_AMOLED的PWM调光和LCD蓝光,哪个比较伤眼?
  17. 关于学习生活看法的维度
  18. win10用hdmi线与电视连接了,但不显示的原因
  19. 如何在eclipse中绑定Genymotion模拟器,并使用
  20. 数据库设计学习③:需求分析的重要性简介

热门文章

  1. iphone移动手机充值
  2. centos安装pcl
  3. 客户端交互设计适配之——屏幕大小
  4. 中国移动网络支付漏洞
  5. H3C的easy ip/basic nat/napt三种NAT转换的区别与配置实例
  6. mysql数据库事务的回滚操作
  7. GitHub 注册失败的原因 以及解决 。
  8. UE接入LTE网络过程——小区搜索
  9. 比MySQL小的数据库_牛x!一个比传统数据库快 100-1000 倍的数据库!
  10. 部编版是什么版本_部编版和人教版的区别有哪些