当"在n秒后自动锁定"

时间:2016-08-07 04:27:43

标签: java android android-intent broadcastreceiver lockscreen

所以我在服务中注册了ACTION_USER_PRESENTACTION_SCREEN_ONACTION_SCREEN_OFF

IntentFilter screenStateFilter = new IntentFilter();
screenStateFilter.addAction(Intent.ACTION_USER_PRESENT);
screenStateFilter.addAction(Intent.ACTION_SCREEN_ON);
screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, screenStateFilter);

以下是一些情况:

  1. [正确] 用户" 屏幕锁定" = 当我按下电源按钮时,会收到ACTION_SCREEN_ONACTION_SCREEN_OFF

  2. [正确] 用户" 屏幕锁定" = 滑动当我按下电源按钮时,会显示锁定屏幕并收到ACTION_SCREEN_ON。解锁后ACTION_USER_PRESENT已收到。

  3. [正确] 用户" 屏幕锁定" = 模式/ PIN /密码& 自动锁定 = 立即当我按下电源按钮时,会显示锁定屏幕并收到ACTION_SCREEN_ON。解锁后ACTION_USER_PRESENT已收到。

  4. [错误] 用户" 屏幕锁定" = 模式/ PIN /密码& 自动锁定 = 15秒当我锁定屏幕并在15秒后解锁时,会显示锁定屏幕并收到ACTION_SCREEN_ON。解锁后ACTION_USER_PRESENT收到。 但是当我锁定屏幕并在15秒之前解锁时,没有显示锁定屏幕(如预期的那样),但只收到ACTION_SCREEN_ON。未收到ACTION_USER_PRESENT。

  5. 那么我怎样才能确保在屏幕仍未解锁时(用户解锁屏幕)/(ACTION_SCREEN_ON)时调用方法。

    我已经尝试了

    KeyguardManager mKeyguard = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
    if (!mKeyguard.inKeyguardRestrictedInputMode()) {
        if (action.equals(Intent.ACTION_SCREEN_ON)) {
            // Call method
        }
    }
    
    if (action.equals(Intent.ACTION_USER_PRESENT)) {
        // Call method
    }
    

    但是在上面3 [Correct] 的情况下,该方法将被调用两次。

    注意:这是&#34的屏幕截图; n秒后自动锁定":

    image

    image

1 个答案:

答案 0 :(得分:0)

您可以使用KeyGuardManager

侦听ACTION_SCREEN_ON,然后检查设备是否已锁定,如果是,请等待ACTION_USER_PRESENT,否则立即运行代码。