Android将闹钟设置为过去的日期
Posted
技术标签:
【中文标题】Android将闹钟设置为过去的日期【英文标题】:Android setting alarm to a past date 【发布时间】:2014-08-29 10:12:54 【问题描述】:如果我添加闹钟但将开始日期设置为过去的日期会怎样?
是被立即执行还是被放入队列并且从不执行?
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, startDate, repeatingValue, alarmIntent);
【问题讨论】:
试试你自己,测试它很简单:) 使用setInexactRepeating
而不是 setRepeating
..
【参考方案1】:
来自documentation,如果startDate时间是过去的,将立即触发警报。
【讨论】:
【参考方案2】:如果日期已过,则警报将立即触发。但是你可以尝试使用setInexactRepeating
而不是setRepeating
:
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, startDate, setInexactRepeating , alarmIntent);
来自setInexactRepeating() docs:
安排一个具有不精确触发时间要求的重复警报; 例如,每小时重复一次的警报,但不一定在 每小时的最高点。
【讨论】:
【参考方案3】:实际上AlarmManager 使用当前时间。 因此,当您设置过去日期警报时,AlarmManager 将执行
public void onReceive(Context context, Intent intent)
方法。
【讨论】:
【参考方案4】:我认为闹钟只设置几个小时(至少通过 android 用户界面),而不是特定的一天,这样它就会从您设置的确切 hour:minute
开始。
【讨论】:
【参考方案5】:我可以从我之前使用AlarmManager
的经验得出结论。过去的日期会立即触发警报。
【讨论】:
【参考方案6】:据我所知,当时间设置为过去时间时,AlarmManager.set 将立即执行,文档也说了这么多。 AlarmManager.setInexactRepeating 缺少这句话,这个闹钟在设置过去的时候不会触发,它会在下一个间隔触发,从给定的时间开始。
【讨论】:
【参考方案7】:AlarmManager.set 和 AlarmManager.setInexactRepeating 都在调用 setImpl,触发时间作为参数传递(在 Android 7.1.2 源代码中检查)。 --> 如果触发时间在过去,这两种方法没有区别。
【讨论】:
以上是关于Android将闹钟设置为过去的日期的主要内容,如果未能解决你的问题,请参考以下文章
当一些闹钟在 Android 中重复时,设置多个闹钟的最佳方式