Android O

时间:2017-06-11 20:30:57

标签: android android-broadcastreceiver android-jobscheduler android-8.0-oreo

现在Android O的最终API已经发布,以下所有广播都没有whitelisted我遇到以下问题:

在我的应用程序(目标API 25)中,我目前有BroadcastReceiver来监听ACTION_POWER_CONNECTEDACTION_POWER_DISCONNECTED的系统事件。现在我想更新我的应用程序以定位Android O但是这个版本在广播行为中出现了巨大的change

  

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

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

为了避免此问题,我可以使用JobScheduler API和[{1}}方法setRequiresCharging,但对于ACTION_POWER_CONNECTED,我必须使用ACTION_POWER_DISCONNECTED方法。

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

顺便说一下。我对WIFI断开事件也有同样的问题。

编辑:我希望在没有前台服务通知的情况下这样做

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

这可能有点矫枉过正,但您可以在由Service启动的前景ACTION_BOOT_COMPLETED中注册这些广播。

答案 2 :(得分:-3)

您可以使用"requires charging"约束使用JobScheduler注册后台作业。至少这是official solution suggestion