问题描述
过去,我们有警报管理器,意图服务,隐式广播接收器,即使应用不在后台,它们也可以运行。
但是今天( post oreo )我们有Work Manager
和Job Schedulers
。当应用程序不在后台时,它们会为我们完成工作,但不能保证确切的执行时间。
因此,今天如果我需要创建一个应用程序,用户可以在其中设置一个警报,该警报将在5:00 am 27 September 2021
处触发。 (出于明显原因跳过2020 ;))
有人尝试过创建警报应用后oreo操作系统,我知道Gmail和其他系统都可以这样做,但是据我所知,他们具有执行操作的特殊权限,而其他应用则不允许。
解决方法
AlarmManager仍可在现代Android设备上使用。 API文档中有关于严格计划保证的说明:
注意:从API 19(Build.VERSION_CODES.KITKAT)开始,警报传递是不精确的:操作系统将转移警报,以最大程度地减少唤醒和电池消耗。有新的API支持需要严格交付保证的应用程序。请参阅
setWindow(int,long,android.app.PendingIntent)
和setExact(int,android.app.PendingIntent)
。 targetSdkVersion早于API 19的应用程序将继续看到以前的行为,在该行为中,所有警报均在请求时准确地传递。
因此,如果您想设置确切的唤醒时间,则可以在API级别19和更高级别上使用setExact()。