警报管理器 - 将警报设置为从开始日期到结束日期运行

时间:2018-04-10 09:51:49

标签: java android alarmmanager repeatingalarm

我目前正在开发一款带有提醒服务的Android应用。我正在使用AlarmManager。我已成功设置闹钟,以便在用户单击按钮时运行。但我希望它从开始日到结束日运行。但是现在,它似乎永远存在。

我已经有了这个:

private void setAlarm(String startDate,String endDate, String startTime, Context ctx, long id, int frequency){

Calendar calendar = Calendar.getInstance();

calendar.set(Calendar.YEAR, Utility.getYear(startDate));
calendar.set(Calendar.MONTH, Utility.getMonth(startDate));
calendar.set(Calendar.DAY_OF_MONTH, Utility.getDay(startDate));
calendar.set(Calendar.HOUR_OF_DAY, Utility.getHour(startTime));
calendar.set(Calendar.MINUTE, Utility.getMinute(startTime));

Intent intent = new Intent(ctx,AlarmReceiver.class);
intent.putExtra("ID", (int)id);
intent.setAction(""+System.currentTimeMillis());

PendingIntent mPendingIntent = PendingIntent.getBroadcast(ctx, (int) id, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager)ctx.getSystemService(Context.ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), (AlarmManager.INTERVAL_DAY / frequency), mPendingIntent);
}

警报有效。我只需将其设置为能够在达到endDate时停止。 谢谢。

2 个答案:

答案 0 :(得分:1)

您无法直接指定警报管理器的结束时间。您可以做的是手动取消广播接收器中的警报管理器。要取消警报管理器,您需要确保待处理的意图具有与您用于设置警报的请求代码相同的请求代码。使用具有待定意图的cancel类的AlarmManager方法作为参数。

答案 1 :(得分:0)

您想在一个时间范围内设置重复警报。您可以在SharedPreferences中存储结束日期的时间戳。每次Pending Intent启动时,您都需要检查它是否超过了结束日期限制。如果是,则取消调用cancel方法alarmManager.cancel(pendingIntent);

的警报