Android BOOT_COMPLETED 在用户通过锁定屏幕之前不会触发

Android BOOT_COMPLETED doesn't fire until user has gone past lock screen

我的应用程序需要在后台 运行 服务,我希望它在 phone 打开时自动启动。 我有 BOOT_COMPLETED 的常用 intent-filter 但发生的事情是...

  1. 我打开 phone。
  2. 一直启动到锁屏
  3. 我通过锁屏。
  4. 后台作业启动。

我 want/need 在我被要求锁定屏幕之前开始的工作。

这是像素 运行 Android N.

干杯。

您的问题是由于 Android 7.0 运行 设备已开机但用户尚未解锁设备时的安全直接启动模式。这会限制凭据加密存储在用户解锁设备之前被访问。因此,您的应用必须注册才能使用设备加密存储,以便在直接启动模式期间和用户解锁设备后使用。

This article 讨论了它的工作原理和示例用例(预定通知、SMS 应用程序等),但您的代码缺少的是 receiverintent-filter 对于 ACTION_LOCKED_BOOT_COMPLETED

基本上,您的清单中需要以下代码

<receiver
  android:directBootAware="true" >
  ...
  <intent-filter>
    <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
  </intent-filter>
</receiver>

如果您需要更多帮助,请告诉我!