8

现在,Android O 的最终 API 已经发布,并且以下广播都没有被列入白名单,我遇到了以下问题:

在我的应用程序(目标 API 25)中,我目前有一个BroadcastReceiver监听 和 的系统ACTION_POWER_CONNECTED事件ACTION_POWER_DISCONNECTED。现在我想更新我的应用程序以针对 Android O,但随着这个版本的发布,广播行为发生了巨大变化:

以 Android O 为目标的应用无法再在其清单中为隐式广播注册广播接收器。隐式广播是不专门针对该应用程序的广播。

由于这两个广播都是隐式的,我只能通过该Context.registerReceiver()方法为它们注册,但随之而来的问题是:一旦我的应用程序的进程被系统杀死或系统清除了我的应用程序的内存(由于低-设备内存)广播注册将丢失。

为了避免这个问题,我可以将JobSchedulerAPI 与setRequiresCharging方法一起使用,ACTION_POWER_CONNECTEDACTION_POWER_DISCONNECTED我必须使用registerReceiver方法。

由于我的应用程序控制设备的音量(基于这些事件),因此不会错过任何这些事件非常重要。那么如何在 Android O 中安全地监听断开电源事件呢?

顺便提一句。我对 WIFI 断开连接事件有同样的问题。

编辑:我很乐意在没有前台服务通知的情况下执行此操作

4

3 回答 3

2

作业可以在不受系统限制的情况下延迟。setOverrideDeadline 方法仅使用尽力而为的策略,因此在这种情况下,您可以将目标 SDK 保持为 25 或使用前台服务。前台服务可以被系统杀死,但概率非常低。

于 2017-06-12T16:15:47.153 回答
2

这可能有点矫枉过正,但您可以在ServiceACTION_BOOT_COMPLETED.

于 2017-06-14T07:15:27.913 回答
-3

JobScheduler您可以使用“需要收费”约束来注册后台作业。至少这是官方的解决方案建议

于 2017-06-14T08:48:41.547 回答