如何为警报管理器设置终点

how to set an Ending Point for Alarm Manager

我有一个定期运行的警报管理器,但我希望有一组特定的时间 运行。例如,假设我们有一个周期性的警报管理器,它注册了一个广播接收器,并且每 30 分钟执行一次操作。问题是我希望警报管理器在特定时间处于活动状态,比如 3 小时,因此警报管理器应该关闭 3 小时/30 分钟或 6 次。

启动定义警报管理器的代码:

TimerPeriodic = (AlarmManager)getActivity().getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(getActivity(),AlarmReceiver.class);
    intent.putExtra(Constants.ALARM_ID, Constants.TIMER_PERIODIC_ID);
    TimerPeriodicPendingIntent = PendingIntent.getBroadcast(getActivity(), 0, intent, 0);

火警管理员:

long start = TimeUnit.MINUTES.toMillis(StartMinutes);
TimerPeriodic.setRepeating(
                            AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + start, start, TimerPeriodicPendingIntent);

如果应用程序被终止,警报管理器也应该处于活动状态。

感谢您的帮助!

使用Sqlite Db可以实现。您存储 Alaram ID、计数和重复次数(您要重复多少次)的位置。

当警报被触发时 (AlarmReceiver.onReceive()) 增加计数检查与重复的条件。如果超过就取消它。希望它会有所帮助:)

    @Override
    public void onReceive(Context context, Intent intent) {
      AlarmManager alarmManager = (AlarmManager) context.getApplicationContext().getSystemService(
                    context.ALARM_SERVICE);
    Intent myIntent = new Intent(context, AlarmReceiver.class);
    cancelAlarm(reminder.getId(),myIntent,alarmManager);
      }

    private void cancelAlarm(int notiId,Intent myIntent,AlarmManager alarmManager) {
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, notiId, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    alarmManager.cancel(pendingIntent);
     }