【问题标题】:Android AlarmManager Timing Specifics?Android AlarmManager 计时细节?
【发布时间】: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,如果我想再次自动调用此警报,我可以使用setInexactRepeatingsetRepeating。除此之外,我的问题是:

如果我第一次打开应用程序是在星期一午夜,则会设置闹钟(例如,星期一 09:31:20)。假设我已将闹钟设置为每 24 小时重复一次,那么接下来的(即第二个)闹钟将设置为星期二(也是 09:31:20)。

但是,当我在周一午夜和周二 09:31:20 之间再次打开应用程序时会发生什么?该应用程序将再次调用Main.java,这将再次运行上述代码。这会重置警报吗?还是他们会加倍?

如果我第二次打开应用程序的闹钟设置为 09:30:55,那么第二次闹钟会覆盖第一次吗?还是会像之前安排的那样,一个接一个地响起 2 个警报?

我找不到任何关于这个主题的文章。如果有人知道,请澄清。谢谢。

【问题讨论】:

  • 你想要它重复还是不重复?无论哪种方式,使用SharedPreferences 存储boolean 以指示是否已设置警报。如果没有,则设置它,否则跳过该代码并且什么也不做。
  • documentationset() 方法声明:“如果已经为这个 Intent 安排了警报(两个 Intent 的相等性由 filterEquals(Intent) 定义),那么它将是删除并替换为这个。”。
  • 谢谢。这些 cmets 非常有用。如果您希望我接受,请重写为完整的答案。

标签: android alarmmanager


【解决方案1】:

正如在各种设置方法的文档中提到的,AlarmManager 一次只保留 一个 一个 PendingIntent 定义的警报。设置警报将导致取消任何先前安排的具有相同PendingIntent 的警报。 Intent 相等是在filterEquals() 方法中定义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多