摘要:后臺,鎖屏,來電,都會自動暫停。得益于蘋果的系統限制,以上情況下都會暫停音視頻的播放。上下文通話管理獲取實現回調函數監聽電話狀態注冊監聽等待接電話電話掛斷通話中獲取刪除監聽暴露出個方法,添加來電監聽廣播,以及刪除。
序章
還記得嗎?在前段時間,我們擼過了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();
嘿嘿嘿嘿,嘿嘿嘿嘿
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80807.html
摘要:之后坐席狀態改變,可以看到有事件推送過來。關于的重連程序后服務端使用這里我直接引用我的另一個項目的部分代碼,這個沒有使用,直接使用瀏覽器原生的。重連的原理很簡單,就是檢測到斷開時,去調用我的方法,這里我也做了重連的次數限制。 由于是前后端分離的demo, 程序的后端我不管,我只負責把前端做好,這只是個demo, 還有很多不完善的地方。 2018-01-09新增:后端的MQ事件結構現在也...
摘要:之后坐席狀態改變,可以看到有事件推送過來。關于的重連程序后服務端使用這里我直接引用我的另一個項目的部分代碼,這個沒有使用,直接使用瀏覽器原生的。重連的原理很簡單,就是檢測到斷開時,去調用我的方法,這里我也做了重連的次數限制。 由于是前后端分離的demo, 程序的后端我不管,我只負責把前端做好,這只是個demo, 還有很多不完善的地方。 2018-01-09新增:后端的MQ事件結構現在也...
閱讀 3606·2021-11-15 11:38
閱讀 2801·2021-11-11 16:55
閱讀 2550·2021-11-08 13:22
閱讀 2627·2021-11-02 14:45
閱讀 1303·2021-09-28 09:35
閱讀 2567·2021-09-10 10:50
閱讀 463·2019-08-30 15:44
閱讀 2775·2019-08-29 17:06