java - "Automatically lock after n seconds"时未收到 ACTION_USER_PRESENT

标签 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。

那么,如何确保在(用户解锁屏幕)/(屏幕仍处于解锁状态时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 种[正确]情况下,该方法将被调用两次。

<小时/>

注意:这是“n秒后自动锁定”的屏幕截图:

image

image

最佳答案

您可以使用KeyGuardManager

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

关于java - "Automatically lock after n seconds"时未收到 ACTION_USER_PRESENT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38810866/

相关文章:

javascript - 当某个延迟部分(例如 setTimeout 或 process.nextTick)中发生异常时,使用 J2V8 的 Java 应用程序会崩溃

Java继承问题

android - 分享图片与 URL android share intent

java - 如何在刷新期间锁定 HashMap ?

java - 如何使用 java 将最后 10 个最新文件保留在目录中?

Android:Cursor.getColumnIndex() 在行循环中是否不变?

java - 构建不断失败

java - 如何使用 volley 库访问 restful web 服务方法

android - Espresso Intent 测试失败

android - BlackBerry - 如何在 Android 中传递像 Intent.putExtra() 这样的数据