当一些闹钟在 Android 中重复时,设置多个闹钟的最佳方式

Posted

技术标签:

【中文标题】当一些闹钟在 Android 中重复时,设置多个闹钟的最佳方式【英文标题】:Best way to set multiple alarms when some are of repeating in nature in Android 【发布时间】:2012-07-08 18:12:00 【问题描述】:

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

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

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

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

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

【问题讨论】:

为什么不使用标准的 Android 日历提醒? ***.com/questions/5976098/… 这需要我不倾向于在应用程序中拥有的日历权限。当用户通过标准日历提醒选择通知时,是否可以有自定义行为? 【参考方案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);

【讨论】:

以上是关于当一些闹钟在 Android 中重复时,设置多个闹钟的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

带定时器的闹钟?

使用 AlarmManager 设置重复通知 - Android

在android中设置重复星期几闹钟

Android:手机重启后设置闹钟/提醒

FPGA课程设计:简单计时器闹钟

如何在 Android 中让闹钟开始响铃?