我希望AlarmManager在预定时间(每周)重复一项任务
我使用了以下代码:
for (Integer day : daysList) {
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_WEEK, PersonalUtils.getDigitalWeek(day));
c.set(Calendar.HOUR_OF_DAY, task.getHour());
c.set(Calendar.MINUTE, task.getMinute());
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
intent.putExtra("id", task.getId());
PendingIntent operation = PendingIntent.getService(
getApplicationContext(), requestCode, intent, 0);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),
AlarmManager.INTERVAL_DAY * 7, operation);
}
但它过早地触发了警报。
例如:假设现在是星期三晚上18:30。我设置了一个应该在下周星期二17:30触发的任务,而是立即触发警报
有人可以告诉我为什么吗?
答案 0 :(得分:1)
您正在尝试执行不准确的警报,该警报仅允许一些特定的常量,INTERVAL_DAY
,INTERVAL_FIFTEEN_MINUTES
等。有关详情,请参阅Android Docs。这些常量只能用于InexactRepeatingAlarms,但我看到你在做一个RepeatingAlarm。
您有几个选择,您可以将警报设置为在1周内触发,或者您可以将其设置为每天不准确地触发,并且只有在第7天发生警报时才会注意它。要从现在开始每7天触发一次,请尝试以下操作:
final long WEEK_IN_MILLIS= 604800000;
alarm.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis()+WEEK_IN_MILLIS,
WEEK_IN_MILLIS, operation);
请注意,我将其设置为在1周内首次触发,然后在每周后重复。这应该适合你。