检查屏幕是否解锁

4

如何检查屏幕是否解锁(即打开并非在锁屏状态)?

PS. 我不是在寻找解锁事件,我知道可以通过AdminDeviceReceiver获取该事件,但我正在寻找一个可执行的代码,它将返回一个布尔值,告诉我屏幕是否已解锁。


1
对于屏幕的开/关,您可以使用屏幕开/关广播。 - Saqib
是的,谢谢,但我需要知道屏幕是否解锁。 - Jakob Harteg
不确定,但你可以尝试捕获设备的触摸屏事件,如果成功了,那就意味着设备已经解锁并正在使用。 - Saqib
1
可能是重复的问题:如何在Android中找到屏幕是否已锁定 - JanBo
5个回答

18

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

3

!mKeyguardManager.isDeviceLocked()


该方法添加于 API Level 22。 - YUSMLE

2
在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...
    }
}

1
根据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;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接