最近在做一个功能,从自己开发的APP切换到别的APP时,需要给用户发送通知告诉用户已经离开了该APPP并关闭后台任务了,如果是锁屏则不用其余操作。
- 有没有判断手机是锁屏还是解锁的函数,最后找到一个安卓上可使用的Native.js
var receiver;
mui.plusReady(function() {
main = plus.android.runtimeMainActivity(); //获取activity
// 广播接收
var ALARM_RECEIVER = "alarm_receiver";
receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: function(context, intent) { //实现onReceiver回调函数
var Intent = plus.android.importClass('android.content.Intent');
console.log(intent.getAction());
//action = intent.getAction();
if(intent.getAction() == Intent.ACTION_SCREEN_ON) {
console.log('开屏')
} else if(intent.getAction() == Intent.ACTION_SCREEN_OFF) {
console.log('锁屏')
} else if(intent.getAction() == Intent.ACTION_USER_PRESENT) {
console.log('解锁')
}
result.textContent += '\nAction :' + intent.getAction();
main.unregisterReceiver(receiver);
}
});
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
var Intent = plus.android.importClass('android.content.Intent');
var filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_USER_PRESENT);
main.registerReceiver(receiver, filter); //注册监听
})
我的需求是只在应用内的某个页面检测是锁屏还是切换应用,但这个方法是广播注册,就算切换了APP还会继续检测手机的解锁开锁,所以不太适合,排除。
- 使用onHide生命周期函数,但是这个函数不管是锁屏还是切换APP都会触发,所以想到能否在onHide时检测屏幕的亮度uni.setScreenBrightness。在ios上,锁屏时亮度为0,切换应用亮度不为0(前提是手机自身亮度不为0),但在安卓上表现就各异了,不管是锁屏还是切换应用亮度表现一致无法区分,所以排除。
后面看到一篇文章,得到启发还是相同的思路,不过换了一种检测屏幕亮度的文章,在uni-app上的实现
/**
* 判断是否手机亮屏
* @returns {boolean}
*/
static isScreenOn() {
if (typeof (plus) !== 'undefined') {
var pm = plus.android.runtimeMainActivity()
.getSystemService(plus.android.android.content.Context.POWER_SERVICE);
return plus.android.invoke(pm, 'isScreenOn');
}
return true;
}
/**
* 判断手机屏幕是否锁定
* @returns {boolean}
*/
static isScreenLocked() {
if (typeof (plus) !== 'undefined') {
var pm = plus.android.runtimeMainActivity()
.getSystemService(plus.android.android.content.Context.KEYGUARD_SERVICE);
return plus.android.invoke(pm, 'inKeyguardRestrictedInputMode');
}
return false;
}
/**
* 这个方法判断屏幕锁定有一点问题,比如第一次是屏幕锁定,第二次是切换应用,后面不管是锁定还是切换都
*会判断为切换应用;如果第一次是切换应用,后面就一直判断为切换应用。不知道是咋回事,有知道大佬们可以解答一下。
*/
- 最终采用了在onHide时,ios端用uni-app的API检测屏幕亮度,安卓端用Native.js,检测手机是否亮屏来实现
有更好思路的大大们,可以留言一下,感谢感谢!
Native.js示例汇总