如何为Alarm Manager设置结束点

时间:2016-03-01 11:42:19

标签: android alarmmanager

我有一个定期运行的警报管理器,但我希望有一组特定的时间来运行它。例如,假设我们有一个向广播接收器注册的周期性报警管理器,并且每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);

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

可以使用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);
     }