Android 当一些警报在安卓系统中重复时,设置多个警报的最佳方法

Android 当一些警报在安卓系统中重复时,设置多个警报的最佳方法,android,alarmmanager,android-alarms,repeatingalarm,Android,Alarmmanager,Android Alarms,Repeatingalarm,我正在构建一个提醒应用程序,其中包括一次、每周、每月提醒,我们会在到期日和时间通知用户提醒。用户可以随时更新提醒,以更新提醒时间或完全删除提醒。我想出了两种方法来解决这个问题 每当用户设置提醒时,使用唯一Id相应地安排报警,并在用户更新或删除报警时更新或删除报警 因为我将提醒时间存储在DB中,所以更好的方法是为最近的提醒安排一个警报。并让由报警计划触发的服务为下一个最近的提醒发出新的报警 第二种方法看起来很干净,但我们如何处理由警报触发的服务在为下一个提醒安排新警报之前被系统终止的情况 编辑 看

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

  • 每当用户设置提醒时,使用唯一Id相应地安排报警,并在用户更新或删除报警时更新或删除报警
  • 因为我将提醒时间存储在DB中,所以更好的方法是为最近的提醒安排一个警报。并让由报警计划触发的服务为下一个最近的提醒发出新的报警
  • 第二种方法看起来很干净,但我们如何处理由警报触发的服务在为下一个提醒安排新警报之前被系统终止的情况

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

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

    需要以与取消已设置的报警完全相同的方式创建挂起的意图。如果您希望在某个时间激活单个警报,则可以在设置新警报时取消以前的警报

    设置报警用途:

    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日历提醒?这需要日历权限,我不希望在应用程序中有日历权限。当用户通过标准日历提醒选择通知时,是否可能有自定义行为?