在Android O中断开广播充电器

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

在我的应用程序(目标API 25)中,我目前有一个BroadcastReceiver ,它侦听ACTION_POWER_CONNECTEDACTION_POWER_DISCONNECTED系统事件。 现在我想更新我的应用程序以定位Android O,但随着此版本的出现,广播行为发生了巨大变化 :

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

由于两个广播都是隐式的,我只能通过Context.registerReceiver()方法注册它们,但问题就出现了:一旦我的应用程序被系统杀死或系统清除我的应用程序的内存(如由于设备内存不足,广播注册将丢失。

为了避免这个问题,我可以使用JobScheduler API和ACTION_POWER_CONNECTEDsetRequiresCharging方法,但对于ACTION_POWER_DISCONNECTED我必须使用registerReceiver方法。

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

顺便说一句。 我有WIFI断开连接事件的相同问题。

编辑:我希望没有来自前台服务的通知我这样做

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

这可能有点过分,但您可以在ACTION_BOOT_COMPLETED启动的前台Service中注册这些广播。

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