成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

【MUI】Android監(jiān)聽電話呼入呼出

I_Am / 2110人閱讀

摘要:后臺(tái),鎖屏,來電,都會(huì)自動(dòng)暫停。得益于蘋果的系統(tǒng)限制,以上情況下都會(huì)暫停音視頻的播放。上下文通話管理獲取實(shí)現(xiàn)回調(diào)函數(shù)監(jiān)聽電話狀態(tài)注冊(cè)監(jiān)聽等待接電話電話掛斷通話中獲取刪除監(jiān)聽暴露出個(gè)方法,添加來電監(jiān)聽廣播,以及刪除。

序章

還記得嗎?在前段時(shí)間,我們擼過了h5的video標(biāo)簽元素,和h5+的plus特性編寫了一個(gè)小小的播放器。至今位置改了一些代碼運(yùn)用到了項(xiàng)目中,卻發(fā)現(xiàn)出現(xiàn)了一個(gè)蛋疼的問題。

Android : 后臺(tái),鎖屏,來電都不能自動(dòng)暫停,哭瞎 T-T。
ios : 后臺(tái),鎖屏,來電,都會(huì)自動(dòng)暫停。得益于蘋果的系統(tǒng)限制,以上情況下都會(huì)暫停音視頻的播放。

搞起

先來分析一波,后臺(tái)事件,5+的文檔中早已出現(xiàn)過。

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

這里需要跟大家提醒下document.addEventListener千萬不要寫成window.addEventListener因?yàn)槲揖蛯戝e(cuò)了一次,我說怎么調(diào)試都不成功。哈哈

再來再來,下一個(gè)下一個(gè),鎖屏是吧,我一開始在官方文檔中翻了一會(huì)兒并沒有發(fā)現(xiàn)有這個(gè)事件,后來仔細(xì)想想,鎖屏的時(shí)候,不就正是另一個(gè)叫做‘鎖屏’的應(yīng)用程序切換到了前臺(tái),而我們的App切換到了后臺(tái)嗎?
果不其然,不需要增加額外的事件,監(jiān)聽了上面的后臺(tái)事件即可,也會(huì)觸發(fā)。

SO,視頻播放中,來電話了,視頻并不會(huì)暫停? Excuse Me?如果是我還好,看一些美劇什么的(
強(qiáng)勢(shì)推薦大家看:《閃電俠》

咳咳,要是別人在看一些那啥怎么辦,orz 。這就很尷尬了,當(dāng)初并沒有想到Android來電不會(huì)自動(dòng)暫停H5 video的播放。

一時(shí)間找文檔也沒有發(fā)現(xiàn) 來電事件

好吧,拿起Native.js大寶劍

1:打開 Native.js 文檔 Native.js
2:打開 Native.js 范例 Native范例匯總
3:打開 baidu.com 搜索 關(guān)鍵字 android 來電監(jiān)聽

差不多就這些了,就算我這樣不怎么懂原生的菜鳥,還是照葫蘆畫瓢,約摸著寫出來點(diǎn)。

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 //實(shí)現(xiàn)onReceiver回調(diào)函數(shù)
            });
            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); //監(jiān)聽電話狀態(tài)
            main.registerReceiver(receiver, filter); //注冊(cè)監(jiān)聽
        });

        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); //刪除監(jiān)聽
            receiver = null;
        }
    }

    return native;
}(mui));

暴露出2個(gè)方法,添加來電監(jiān)聽廣播,以及刪除。

    //監(jiān)聽電話 code 1來電 0掛斷 2童話中    number 對(duì)方電話號(hào)碼
    mui.os.android && Native.listenTelPhone(function(code, number) {
        if(code === 1) { //來電
            //暫停播放
            //code...
        }
    });

    //去除電話廣播監(jiān)聽
    mui.os.android && Native.removeListenTelPhone();

嘿嘿嘿嘿,嘿嘿嘿嘿

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/80807.html

相關(guān)文章

  • Vue+websocket+stompjs 實(shí)時(shí)監(jiān)控坐席狀態(tài)demo

    摘要:之后坐席狀態(tài)改變,可以看到有事件推送過來。關(guān)于的重連程序后服務(wù)端使用這里我直接引用我的另一個(gè)項(xiàng)目的部分代碼,這個(gè)沒有使用,直接使用瀏覽器原生的。重連的原理很簡(jiǎn)單,就是檢測(cè)到斷開時(shí),去調(diào)用我的方法,這里我也做了重連的次數(shù)限制。 由于是前后端分離的demo, 程序的后端我不管,我只負(fù)責(zé)把前端做好,這只是個(gè)demo, 還有很多不完善的地方。 2018-01-09新增:后端的MQ事件結(jié)構(gòu)現(xiàn)在也...

    yankeys 評(píng)論0 收藏0
  • Vue+websocket+stompjs 實(shí)時(shí)監(jiān)控坐席狀態(tài)demo

    摘要:之后坐席狀態(tài)改變,可以看到有事件推送過來。關(guān)于的重連程序后服務(wù)端使用這里我直接引用我的另一個(gè)項(xiàng)目的部分代碼,這個(gè)沒有使用,直接使用瀏覽器原生的。重連的原理很簡(jiǎn)單,就是檢測(cè)到斷開時(shí),去調(diào)用我的方法,這里我也做了重連的次數(shù)限制。 由于是前后端分離的demo, 程序的后端我不管,我只負(fù)責(zé)把前端做好,這只是個(gè)demo, 還有很多不完善的地方。 2018-01-09新增:后端的MQ事件結(jié)構(gòu)現(xiàn)在也...

    EdwardUp 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<