【MUI】Android监听电话呼入呼出

序章

还记得吗?在前段时间,我们撸过了h5的video标签元素,和h5+的plus特征编写了一个小小的播放器。至今位置改了一些代码应用到了项目中,却发明涌现了一个蛋疼的题目。

Android : 背景,锁屏,来电都不能自动停息,哭瞎 T-T。
ios : 背景,锁屏,来电,都邑自动停息。得益于苹果的体系限定,以上情况下都邑停息音视频的播放。

搞起

先来剖析一波,背景事宜,5+的文档中早已涌现过。

          document.addEventListener('pause',function(){
              //code...
              //停息播放
          });

这里须要跟人人提示下document.addEventListener万万不要写成window.addEventListener由于我就写错了一次,我说怎样调试都不胜利。哈哈

再来再来,下一个下一个,锁屏是吧,我一开始在官方文档中翻了一会儿并没有发明有这个事宜,厥后细致想一想,锁屏的时刻,不就恰是另一个叫做‘锁屏’的应用程序切换到了前台,而我们的App切换到了背景吗?
果不其然,不须要增添分外的事宜,监听了上面的背景事宜即可,也会触发。

SO,视频播放中,来电话了,视频并不会停息? Excuse Me?如果是我还好,看一些美剧什么的(
强势引荐人人看:《闪电侠》

咳咳,如果他人在看一些那啥怎样办,orz 。这就很为难了,当初并没有想到Android来电不会自动停息H5 video的播放。

一时间找文档也没有发明 来电事宜

好吧,拿起Native.js大宝剑

1:翻开 Native.js 文档 Native.js
2:翻开 Native.js 类型 Native类型汇总
3:翻开 baidu.com 搜刮 关键字 android 来电监听

差不多就这些了,就算我如许不怎样懂原生的菜鸟,照样照葫芦画瓢,约摸着写出来点。

var Native = (function($) {
    var native = {};
    var receiver, main, context, TelephonyManager;
    
    native.listenTelPhone = function(callback) {
        
        $.plusReady(function() {
            context = plus.android.importClass('android.content.Context'); //上下文
            TelephonyManager = plus.android.importClass('android.telephony.TelephonyManager'); //通话治理
            main = plus.android.runtimeMainActivity(); //猎取activity
            receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
                onReceive: doReceive //完成onReceiver回调函数
            });
            var IntentFilter = plus.android.importClass('android.content.IntentFilter');
            var Intent = plus.android.importClass('android.content.Intent');
            var filter = new IntentFilter();
            
            filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); //监听电话状况
            main.registerReceiver(receiver, filter); //注册监听
        });

        function doReceive(context, intent) {
            plus.android.importClass(intent);

            var phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER),
                telephony = context.getSystemService(context.TELEPHONY_SERVICE),
                state = telephony.getCallState();
            switch(state) {
                case TelephonyManager.CALL_STATE_RINGING:
                    callback && callback(1,phoneNumber);
                    //console.log("[Broadcast]守候接电话=" + phoneNumber);
                    break;
                case TelephonyManager.CALL_STATE_IDLE:
                    callback && callback(0,phoneNumber);
                    console.log("[Broadcast]电话挂断=" + phoneNumber);
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    callback && callback(2,phoneNumber);
                    console.log("[Broadcast]通话中=" + phoneNumber);
                    break;
            }
        }
    },
    native.removeListenTelPhone = function(){
        if(receiver){
            main = plus.android.runtimeMainActivity(); //猎取activity
            main.unregisterReceiver(receiver); //删除监听
            receiver = null;
        }
    }

    return native;
}(mui));

暴露出2个要领,增加来电监听播送,以及删除。

    //监听电话 code 1来电 0挂断 2童话中    number 对方电话号码
    mui.os.android && Native.listenTelPhone(function(code, number) {
        if(code === 1) { //来电
            //停息播放
            //code...
        }
    });

    //去除电话播送监听
    mui.os.android && Native.removeListenTelPhone();

嘿嘿嘿嘿,嘿嘿嘿嘿

    原文作者:newsning
    原文地址: https://segmentfault.com/a/1190000007421972
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞