【发布时间】:2014-12-10 14:38:24
【问题描述】:
这是我正在运行的简要说明:
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 个警报?
我找不到任何关于这个主题的文章。如果有人知道,请澄清。谢谢。
【问题讨论】:
-
你想要它重复还是不重复?无论哪种方式,使用
SharedPreferences存储boolean以指示是否已设置警报。如果没有,则设置它,否则跳过该代码并且什么也不做。 -
documentation 的
set()方法声明:“如果已经为这个 Intent 安排了警报(两个 Intent 的相等性由filterEquals(Intent)定义),那么它将是删除并替换为这个。”。 -
谢谢。这些 cmets 非常有用。如果您希望我接受,请重写为完整的答案。
标签: android alarmmanager