我有一个定期运行的警报管理器,但我希望有一组特定的时间来运行它。例如,假设我们有一个向广播接收器注册的周期性报警管理器,并且每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);
如果应用程序被终止,警报管理器也应该处于活动状态。
感谢您的帮助!
答案 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);
}