安卓系统将闹钟设置为过去的日期



如果我添加了一个警报,但将开始日期设置为过去的日期,会发生什么?

is是立即被执行,还是被放入队列而从未执行?

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, startDate, repeatingValue, alarmIntent);

根据文档,如果startDate时间在过去,则会立即触发警报。

如果日期在过去,则会立即触发警报。但是,您可以尝试使用setInexactRepeating而不是setRepeating:

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, startDate, setInexactRepeating , alarmIntent);

来自setInexactRepeating()文档:

安排具有不精确触发时间要求的重复警报;例如,每小时重复一次的警报,但不一定在每个小时的顶部。

实际上AlarmManager使用当前时间。因此,当您设置过去日期报警时,AlarmManager将执行

public void onReceive(Context context, Intent intent)
{
}

方法。

我认为警报只设置了几个小时(至少通过Android用户界面),而不是特定的一天,这样它将在您设置的确切hour:minute上启动。

我可以从以前使用AlarmManager的经验中得出结论。过去的日期将立即触发警报。

据我所知,当时间设置为过去时间时,AlarmManager.set将立即执行,文档中也说明了这一点。AlarmManager.setInexatRepeating缺少此语句,此警报在过去设置时不会触发,它将在下一个间隔触发,从给定时间开始。

AlarmManager.set和AlarmManager.setInexatRepeating都在调用setImpl,它们得到的触发时间作为参数传递(在Android 7.1.2源中检查)。-->如果triggertime是过去的,那么这两种方法没有区别。

相关内容

最新更新