还记得吗?在前段时间,咱们撸过了h5的video标签元素,和h5+的plus特性编写了一个小小的播放器。至今位置改了一些代码运用到了项目中,却发现出现了一个蛋疼的问题。html
Android : 后台,锁屏,来电都不能自动暂停,哭瞎 T-T。
ios : 后台,锁屏,来电,都会自动暂停。得益于苹果的系统限制,以上状况下都会暂停音视频的播放。html5
先来分析一波,后台事件,5+的文档中早已出现过。android
document.addEventListener('pause',function(){ //code... //暂停播放 });
这里须要跟你们提醒下document.addEventListener千万不要写成window.addEventListener由于我就写错了一次,我说怎么调试都不成功。哈哈ios
再来再来,下一个下一个,锁屏是吧,我一开始在官方文档中翻了一下子并无发现有这个事件,后来仔细想一想,锁屏的时候,不就正是另外一个叫作‘锁屏’的应用程序切换到了前台,而咱们的App切换到了后台吗?
果不其然,不须要增长额外的事件,监听了上面的后台事件便可,也会触发。ide
SO,视频播放中,来电话了,视频并不会暂停? Excuse Me?若是是我还好,看一些美剧什么的(
强势推荐你们看:《闪电侠》
)
咳咳,要是别人在看一些那啥怎么办,orz 。这就很尴尬了,当初并无想到Android来电不会自动暂停H5 video的播放。函数
一时间找文档也没有发现 来电事件ui
好吧,拿起Native.js大宝剑.net
1:打开 Native.js 文档 Native.js
2:打开 Native.js 范例 Native范例汇总
3:打开 baidu.com 搜索 关键字 android 来电监听调试
差很少就这些了,就算我这样不怎么懂原生的菜鸟,仍是照葫芦画瓢,约摸着写出来点。code
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();
嘿嘿嘿嘿,嘿嘿嘿嘿