根据我的理解,如果我想使用AlarmManager类创建一个精确的重复警报(无论设备是否处于空闲模式),我需要使用不同的方案,具体取决于安装的Android版本。根据我的读数,我需要使用setRepeating和RTC_WAKEUP来获得最多18的API,setExact使用手动重新调度RTC_WAKEUP来获得19到22之间的API,最后使用setExactAndAllowWhileIdle来手动重新调度API> = to 23。
我应该如何处理所有案件?我应该验证API版本,然后相应地编程警报吗?
或者是否有可用于向后兼容的支持库,这适用于所有情况?
如果我需要使用上面的第一个替代方法,如何取消警报?我是否需要使用类似的方案,我会在其中验证所使用的API版本,并为取消执行不同的代码,对应于安装的API?
谢谢。 Ĵ
答案 0 :(得分:0)
我该如何处理所有案件?我应该验证API版本,然后相应地编程警报吗?
如果您愿意,可以在19版之前的Android版本上使用set()
,并对所有版本保持手动重新安排一致,而不是在某些版本上使用手动重新安排,而在其他版本上使用自动安排。
另请注意,在Android P上,如果您的应用属于非活动应用备用存储分区,我甚至会认为setExactAndAllowWhileIdle()
不准确。
或者是否有可用于向后兼容的支持库,这适用于所有场景?
There is AlarmManagerCompat
,提供setExactAndAllowWhileIdle()
的向后兼容实现。
如何取消闹钟?我是否需要使用类似的方案,我会在其中验证所使用的API版本,并为取消执行不同的代码,与安装的API相对应?
由于您PendingIntent
取消,如果您使用不同的PendingIntent
结构,则只需要不同的取消逻辑。我的猜测是,您可以对所有场景使用相同的PendingIntent
,在这种情况下,cancel()
逻辑对于所有场景都是相同的。