2017-03-31 100 views
0

我需要一个服务在后台运行,用于我的应用程序,并且我希望它在手机开机时自动启动。 我已经得到了BOOT_COMPLETED通常的意图过滤器,但发生的事情是这样的......Android BOOT_COMPLETED不会触发,直到用户经过锁定屏幕

  1. 我打开手机。
  2. 它启动,直到锁定屏幕。
  3. 我通过锁定屏幕。
  4. 后台工作启动。

我想/需要在我被要求锁定屏幕前开始工作。

这是在运行Android N的像素上。

干杯。

回答

2

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

This article讨论它的工作原理和使用案例(计划通知,短信的应用程序等),但你的代码缺失是ACTION_LOCKED_BOOT_COMPLETED一个receiverintent-filter

从本质上讲,你需要下面的代码在您的清单

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

让我知道如果你需要更多的帮助!