Java Android将报警设置为过去日期

Java Android将报警设置为过去日期,java,android,alarmmanager,alarm,Java,Android,Alarmmanager,Alarm,如果我添加一个警报,但将开始日期设置为过去的日期,会发生什么情况 是立即执行,还是将其放入队列而从未执行 alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, startDate, repeatingValue, alarmIntent); 我认为警报只会设置几个小时(至少通过Android用户界面),而不是特定的一天,这样它会在您设置的确切时间开始。如果日期已过,则警报会立即触发。但是,您可以尝试使用setInexactRepeating而不是

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

是立即执行,还是将其放入队列而从未执行

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

我认为警报只会设置几个小时(至少通过Android用户界面),而不是特定的一天,这样它会在您设置的确切时间开始。

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

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

安排重复报警,该报警具有不精确的触发时间要求; 例如,每小时重复一次的警报,但不一定在 每小时的最高峰


从,如果开始日期时间是过去的,则会立即触发报警。

正如我以前使用
AlarmManager的经验所总结的那样。过去的日期将立即触发报警。

实际上AlarmManager与当前时间一起工作。 因此,当您设置过去日期报警时,AlarmManager将执行

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

方法。

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

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

试一下自己,测试一下非常简单:)使用
setInexactRepeating
而不是
setRepeating
。。