3

我正在构建一个提醒应用程序,其中一次、每周、每月提醒,我们会在到期日期和时间通知用户提醒。用户可以随时更新提醒,以更新提醒时间或完全删除提醒。我已经想到了两种方法可以解决特定问题。

  1. 每当用户设置提醒时,使用唯一 ID 相应地安排警报并更新或删除它,以防用户更新或删除警报。
  2. 由于我将提醒时间存储在数据库中,因此更好的方法是为最近的提醒安排警报。并让由警报触发的服务为下一个最近的提醒安排一个新警报。

第二种方法似乎很干净,但是我们如何解决警报触发的服务在为下一次提醒安排新警报之前被系统杀死的情况?

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

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

4

1 回答 1

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);
于 2019-09-17T14:20:01.667 回答