所以我在服务中注册了ACTION_USER_PRESENT
,ACTION_SCREEN_ON
和ACTION_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);
以下是一些情况:
[正确] 用户" 屏幕锁定" = 无:当我按下电源按钮时,会收到ACTION_SCREEN_ON
和ACTION_SCREEN_OFF
。
[正确] 用户" 屏幕锁定" = 滑动:当我按下电源按钮时,会显示锁定屏幕并收到ACTION_SCREEN_ON
。解锁后ACTION_USER_PRESENT
已收到。
[正确] 用户" 屏幕锁定" = 模式/ PIN /密码& 自动锁定 = 立即:当我按下电源按钮时,会显示锁定屏幕并收到ACTION_SCREEN_ON
。解锁后ACTION_USER_PRESENT
已收到。
[错误] 用户" 屏幕锁定" = 模式/ PIN /密码& 自动锁定 = 15秒:当我锁定屏幕并在15秒后解锁时,会显示锁定屏幕并收到ACTION_SCREEN_ON
。解锁后ACTION_USER_PRESENT
收到。 但是当我锁定屏幕并在15秒之前解锁时,没有显示锁定屏幕(如预期的那样),但只收到ACTION_SCREEN_ON
。未收到ACTION_USER_PRESENT。
那么我怎样才能确保在屏幕仍未解锁时(用户解锁屏幕)/(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秒后自动锁定":
答案 0 :(得分:0)
您可以使用KeyGuardManager
侦听ACTION_SCREEN_ON,然后检查设备是否已锁定,如果是,请等待ACTION_USER_PRESENT,否则立即运行代码。