Ich habe eine BroadcastReceiver
, die Alarme bei Ereignissen wie Booten und Zeitänderung neu plant. Wenn die Zeit jedoch nach der Auslösezeit des Alarms verstrichen ist (z. B. wenn der Benutzer die Uhrzeit manuell von den Einstellungen ändert), löst der Alarm sofort aus, bevor ich einen Tag hinzufügen kann, um den Alarm neu zu planen. Wie kann ich das vermeiden?AlarmManager feuert Alarme in der Vergangenheit, unmittelbar bevor BroadcastReceiver es neu planen kann
Ich verwende derzeit das Set und Methoden des Calendar
hinzufügen, um die Alarme zu planen.
for (int dayOfWeek = Calendar.SUNDAY; dayOfWeek <= Calendar.SATURDAY; dayOfWeek++) {
if (alarm.getRepeatingDay(dayOfWeek - 1) && dayOfWeek >= nowDay &&
!(dayOfWeek == nowDay && alarm.timeHour < nowHour) &&
!(dayOfWeek == nowDay && alarm.timeHour == nowHour && alarm.timeMinute <= nowMinute)) {
calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);
alarmSet = true;
break;
}
}
if (!alarmSet) {
for (int dayOfWeek = Calendar.SUNDAY; dayOfWeek <= Calendar.SATURDAY; dayOfWeek++) {
if (alarm.getRepeatingDay(dayOfWeek - 1) && dayOfWeek <= nowDay) {
calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);
calendar.add(Calendar.WEEK_OF_YEAR, 1);
break;
}
}
}
Es ist auch in der Dokumentation angegeben:
Wenn die angegebene Trigger-Zeit in der Vergangenheit ist, wird der Alarm sofort ausgelöst werden.
Wie kann dieses Verhalten geändert werden?
Ich würde vorschlagen, Sie Jobscheduler zu verwenden, wie Sie loswerden der gestellten Aufgabe zu bekommen. – UMESH0492