uni-app判断APP到底是切换应用还是锁屏

977 阅读2分钟

最近在做一个功能,从自己开发的APP切换到别的APP时,需要给用户发送通知告诉用户已经离开了该APPP并关闭后台任务了,如果是锁屏则不用其余操作。

  1. 有没有判断手机是锁屏还是解锁的函数,最后找到一个安卓上可使用的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还会继续检测手机的解锁开锁,所以不太适合,排除。

  1. 使用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;  
    }
    /**  
     * 这个方法判断屏幕锁定有一点问题,比如第一次是屏幕锁定,第二次是切换应用,后面不管是锁定还是切换都
     *会判断为切换应用;如果第一次是切换应用,后面就一直判断为切换应用。不知道是咋回事,有知道大佬们可以解答一下。
     */  

原文地址

  1. 最终采用了在onHide时,ios端用uni-app的API检测屏幕亮度,安卓端用Native.js,检测手机是否亮屏来实现

有更好思路的大大们,可以留言一下,感谢感谢!

Native.js示例汇总