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

当一些闹钟在 Android 中重复时,设置多个闹钟的最佳方式

如何在android中的特定时间和日期获得警报?

如何使用 AlarmClock 在 android 中设置闹钟的日期

android中的原始闹钟是不是会在闹钟时广播意图?

Android:除周末外,每天设置闹钟