Android 5.1中的AlarmManager setExact

时间:2016-09-30 14:54:17

标签: android alarmmanager

来自Optimizing for Doze and App Standby

  

Doze特别容易影响AlarmManager的活动   警报和计时器管理,因为Android 5.1中的警报(API级别22)   系统处于打盹时,或者不要点火。

     

为了帮助安排警报,Android 6.0(API级别23)介绍了   两个新的AlarmManager方法:setAndAllowWhileIdle()和   setExactAndAllowWhileIdle()。使用这些方法,您可以设置警报   即使设备处于打盹状态,它也会触发。

那么,如果我需要在Android 5.1的Doze中准确设置闹钟,我该怎么办?这不可能吗?

这是我的代码

if (noPreciseTime) {
    alarmManager.set(AlarmManager.RTC_WAKEUP, now + interval, pendingIntent)
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
    alarmManager.set(AlarmManager.RTC_WAKEUP, time, pendingIntent)
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
    alarmManager.setExact(AlarmManager.RTC_WAKEUP, time, pendingIntent)
} else {
    alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, time, pendingIntent)
}

2 个答案:

答案 0 :(得分:3)

  

那么,如果我需要在确切的时间设置闹钟,即使在Android 5.1中的Doze期间,该怎么办?

运行5.1的设备不打瞌睡,因此您无需担心。此

alarmManager.setExact(AlarmManager.RTC_WAKEUP, time, pendingIntent)

将在5.1中按预期工作。引入了较新的setExactAndAllowWhileIdle,以便在运行6.0+的设备上使用。你的代码片段没问题。

  当系统处于Doze

时,Android 5.1(API级别22)或更低级别的警报不会触发

这是一个令人困惑的声明。他们在这里要说的是警报使用5.1或更低版本的API设置(如setExact)在设备处于打盹时不会触发

答案 1 :(得分:0)

在我的实验中,AlarmManagerCompat + setAlarmClock稳定可在打ze模式下唤醒。我使用的是使用MIUI的小米设备。

AlarmManagerCompat.setAlarmClock(alarmManager, time, showIntent, pendingIntent)