设置多个警报的最佳方式,当Android中的某些警报重复出现时

时间:2012-07-09 10:44:00

标签: android alarmmanager android-alarms repeatingalarm

我正在建立一个提醒应用程序,其中包含一次,每周,每月提醒,并在截止日期和时间通知用户提醒。用户可以随时更新提醒以更新提醒时间或完全删除提醒。我想到了两种解决特定问题的方法。

  1. 每当用户设置提醒时,请使用唯一ID相应地安排警报,并在用户更新或删除警报时更新或删除警报。
  2. 由于我将提醒时间存储在数据库中,因此更好的方法是为最近的提醒安排闹钟。并且由警报触发的服务为下一个最近的提醒安排新的警报。
  3. 第二种方法似乎是干净的方法但是我们如何处理由警报触发的服务在为下一次提醒安排新警报之前被系统杀死的情况?

    修改 看起来如果系统杀死内存服务,它将重新创建服务。这是否意味着每次运行时依靠服务来安排警报是安全的?

    编辑2 我意识到Android会在设备重启时终止任何警报。这使得方法2成为更好的解决方案。我现在已经实现了它。

1 个答案:

答案 0 :(得分:1)

需要使用完全相同的方式来创建挂起的意图,以取消已设置的警报。如果您想在某个时间激活单个警报,则可以在设置新警报时取消上一个警报。

要设置闹钟,请使用:

Intent myIntent = new Intent(getApplicationContext(), SessionReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 1, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

alarmManager.set(AlarmManager.RTC, now.getTimeInMillis(), pendingIntent);

要取消警报,请使用:

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent myIntent = new Intent(getApplicationContext(), SessionReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 1, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

alarmManager.cancel(pendingIntent);