使用不同API的AlarmManager

时间:2018-05-12 15:12:41

标签: android alarmmanager android-alarms

根据我的理解,如果我想使用AlarmManager类创建一个精确的重复警报(无论设备是否处于空闲模式),我需要使用不同的方案,具体取决于安装的Android版本。根据我的读数,我需要使用setRepeating和RTC_WAKEUP来获得最多18的API,setExact使用手动重新调度RTC_WAKEUP来获得19到22之间的API,最后使用setExactAndAllowWhileIdle来手动重新调度API> = to 23。

  1. 我应该如何处理所有案件?我应该验证API版本,然后相应地编程警报吗?

  2. 或者是否有可用于向后兼容的支持库,这适用于所有情况?

  3. 如果我需要使用上面的第一个替代方法,如何取消警报?我是否需要使用类似的方案,我会在其中验证所使用的API版本,并为取消执行不同的代码,对应于安装的API?

  4. 谢谢。 Ĵ

1 个答案:

答案 0 :(得分:0)

  

我该如何处理所有案件?我应该验证API版本,然后相应地编程警报吗?

如果您愿意,可以在19版之前的Android版本上使用set(),并对所有版本保持手动重新安排一致,而不是在某些版本上使用手动重新安排,而在其他版本上使用自动安排。

另请注意,在Android P上,如果您的应用属于非活动应用备用存储分区,我甚至会认为setExactAndAllowWhileIdle()不准确。

  

或者是否有可用于向后兼容的支持库,这适用于所有场景?

There is AlarmManagerCompat,提供setExactAndAllowWhileIdle()的向后兼容实现。

  

如何取消闹钟?我是否需要使用类似的方案,我会在其中验证所使用的API版本,并为取消执行不同的代码,与安装的API相对应?

由于您PendingIntent取消,如果您使用不同的PendingIntent结构,则只需要不同的取消逻辑。我的猜测是,您可以对所有场景使用相同的PendingIntent,在这种情况下,cancel()逻辑对于所有场景都是相同的。