以下是我正在运行的内容:
Main.java:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"));
//make calls any time between 09:30:00 and 09:31:59
cal.set(Calendar.HOUR_OF_DAY, 9);
//we make these random so not all calls are made by all accounts all at once
cal.set(Calendar.MINUTE, randInt(30, 31));
cal.set(Calendar.SECOND, randInt(0, 59));
Intent receiverIntent = new Intent(Main.this, Receiver.class);
pendingIntent = PendingIntent.getBroadcast(Main.this, 0, receiverIntent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
根据我的理解,上面的代码将会:
允许该应用在后台运行(即使设备处于睡眠状态,按RTC_WAKEUP
)
不重复
将在09:30:00和09:31:59(randInt(int, int)
是自定义方法)之间触发,无论设备位于何处
根据Google,如果我希望此警报再次自动调用,我可以使用setInexactRepeating
或setRepeating
。我的问题是:
如果我第一次打开应用程序是星期一午夜,则会设置闹钟(例如,星期一09:31:20)。假设我将警报设置为每24小时重复一次,然后将在周二(也在09:31:20)设置以下(即第二个)警报。
然而,在周一午夜和周二09:31:20之间,我再次打开应用程序会发生什么?该应用程序将再次调用Main.java
,这将再次运行上述代码。会重置警报吗?或者他们会加倍吗?
如果第二次打开应用程序,警报设置为09:30:55,那么第二次警报是否会覆盖第一次警报?或者是否有2个警报按照之前的计划一个接一个地关闭?
我找不到关于这个主题的任何内容。如果有人知道,请澄清。谢谢。
答案 0 :(得分:1)
如各种设置方法的文档中所述,AlarmManager
一次仅保留PendingIntent
定义的一个警报。设置闹钟将导致任何先前安排的具有相同PendingIntent
的闹钟被取消。 Intent
方法定义了{{1}}等式。