设备重新启动时立即重新安排警报Android Oreo

时间:2019-04-11 15:26:16

标签: android broadcastreceiver android-service alarmmanager android-alarms

我想在设备重启后立即重新安排应用程序的警报*。对于此过程,我向本地数据库进行查询,以获取警报详细信息,然后将其设置为AlarmManager。这些动作必须在后台线程中执行。 所以我尝试了以下方法:

1)我将上面的代码放在JobIntentService中,并命名为enqueueWork(),但是显然工作没有立即执行。

2)我将上面的代码放在Service(在AsyncTask中)中,并称为startForegroundService。这似乎可行,但这不是使用基于Android文档的Foreground Service的正确案例。

3)创建一个计划作业,并设置setMinimumLatency(0)以便立即执行代码。

您认为哪种是立即安排警报的最正确方法?您还有其他建议吗?

*在onReceive()的{​​{1}}的{​​{1}}中。

1 个答案:

答案 0 :(得分:0)

  

作为Android 8.0(API级别26)后台执行限制的一部分,   面向API级别26或更高级别的应用程序无法再注册   清单中隐式广播的广播接收器。

但幸运的是,function isSubsetOf(set, subset) { return Array.from(new Set([...set, ...subset])).length === set.length; } 不受上述规则约束。 Source

因此,您可以使用ACTION_BOOT_COMPLETED动作定义BroadcastReceiver,然后在ACTION_BOOT_COMPLETED方法中,使用onReceiveJobIntentService将警报调度工作委托给后台线程