检查屏幕是否已解锁

时间:2014-01-14 12:40:46

标签: android

如何检查屏幕是否已解锁(E.i.开启而不是锁定屏幕)?

PS。我不是在寻找解锁事件,我知道可以使用AdminDeviceReceiver检索它,但我正在寻找一个可执行代码,它将返回一个布尔值,告诉我屏幕是否已解锁。

5 个答案:

答案 0 :(得分:12)

试试这个:

   KeyguardManager myKM = (KeyguardManager) сontext.getSystemService(Context.KEYGUARD_SERVICE);
   if( myKM.inKeyguardRestrictedInputMode() ) {
        // it is locked
   } else {
        //it is not locked
   }

取自:Detecting when screen is locked

同样的回答:How to tell if user is on lock screen from service

答案 1 :(得分:4)

KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
            if( keyguardManager.inKeyguardRestrictedInputMode()) {
                System.out.println("~~~SCREEN LOCKED~~~");
            } else {
                System.out.println("~~~SCREEN NOT LOCKED~~~");
            }

答案 2 :(得分:1)

使用Power Manager检查onPause方法中的屏幕关闭状态

@Override
protected void onPause()
{
    super.onPause();

    // If the screen is off then the device has been locked
    PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
    boolean isScreenOn = powerManager.isScreenOn();

    if (!isScreenOn) {

        // The screen has been locked 
        // do stuff...
    }
}

答案 3 :(得分:1)

!mKeyguardManager.isDeviceLocked()

答案 4 :(得分:0)

根据Google文档inKeyguardRestrictedInputMode已弃用。代替您可以使用以下方法唤醒电话或不唤醒电话。

private boolean isPhoneIsLockedOrNot(Context context) {
        boolean isPhoneLock = false;
        if (context != null) {
            KeyguardManager myKM = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
            if (myKM != null && myKM.isKeyguardLocked()) {
                isPhoneLock = true;
            }
        }
        return isPhoneLock;
    }