现在Android O的最终API已经发布,以下所有广播都没有whitelisted我遇到以下问题:
在我的应用程序(目标API 25)中,我目前有BroadcastReceiver
来监听ACTION_POWER_CONNECTED
和ACTION_POWER_DISCONNECTED
的系统事件。现在我想更新我的应用程序以定位Android O但是这个版本在广播行为中出现了巨大的change:
针对Android O的应用无法再注册广播接收器 用于清单中的隐式广播。隐式广播是一种 广播没有专门针对该应用。
由于两个广播都是隐式的,我只能通过Context.registerReceiver()
方法注册它们,但问题就出现了:一旦我的应用程序被系统杀死或系统清除我的应用程序内存(由于设备内存不足)广播注册将丢失。
为了避免此问题,我可以使用JobScheduler
API和[{1}}方法setRequiresCharging
,但对于ACTION_POWER_CONNECTED
,我必须使用ACTION_POWER_DISCONNECTED
方法。
由于我的应用程序控制了设备的音量(基于这些事件),因此不会错过任何这些事件。那么如何安全地在Android O中监听断开的电源事件?
顺便说一下。我对WIFI断开事件也有同样的问题。
编辑:我希望在没有前台服务通知的情况下这样做
答案 0 :(得分:2)
可以在没有系统限制的情况下延迟作业。 setOverrideDeadline方法仅使用尽力而为策略,因此在这种情况下,您可以将目标SDK保持为25或使用前台服务。 Foregournd服务可以被系统杀死,但概率很低。
答案 1 :(得分:2)
这可能有点矫枉过正,但您可以在由Service
启动的前景ACTION_BOOT_COMPLETED
中注册这些广播。
答案 2 :(得分:-3)
您可以使用"requires charging"约束使用JobScheduler
注册后台作业。至少这是official solution suggestion。