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