【问题标题】:AlarmManager setExact in Android 5.1Android 5.1 中的 AlarmManager setExact
【发布时间】:2016-09-30 14:54:16
【问题描述】:

来自Optimizing for Doze and App Standby

打瞌睡特别有可能影响 AlarmManager 的活动 警报和计时器管理,因为 Android 5.1(API 级别 22)中的警报 当系统处于打盹状态时,或更低不会触发。

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

那么,如果我需要在 Android 5.1 中设置确切时间的闹钟,即使是在打瞌睡期间,我该怎么办?不可能吗?

这是我的代码

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)
}

【问题讨论】:

    标签: android alarmmanager


    【解决方案1】:

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

    运行 5.1 的设备不会打瞌睡,因此您不必担心。这个

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

    将在 5.1 中按预期工作。引入了较新的 setExactAndAllowWhileIdle 用于运行 6.0+ 的设备。你的代码 sn-p 没问题。

    Android 5.1(API 级别 22)或更低版本中的警报不会在系统处于打瞌睡状态时触发

    这是一个有点令人困惑的说法。他们的意思是警报使用 5.1 或更低的 API 设置(如 setExact)在设备处于休眠状态时不会触发

    【讨论】:

    • setExactAndAllowWhileIdle 是正确使用的api,也不要忘记在清单中注册广播(我很晚才发现)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多