Ich muss täglich zu einer bestimmten Uhrzeit einen Alarm einstellen. Ich programmiere den Alarm mit AlarmManager.RTC_WAKEUP
, also verwendet er die Systemzeit als Referenz. Ich stelle den Alarm so ein, dass er zuerst zur gewünschten Stunde ausgeführt wird und dann täglich wiederholt wird:
Die Methode getTimestampToday
gibt einen langen Zeitstempel für den heutigen Tag zur gewünschten Stunde zurück. Dazu wird das lokale Datum für heute abgerufen, dann die gewünschte Stunde eingestellt und schließlich in einen Zeitstempel umgewandelt (der auf UTC basiert).
Das Problem hier ist, dass der Alarm entsprechend der Ortszeit funktionieren sollte. Wenn sich die Zeit also nach der Planung des Alarms ändert (z. B. wenn sich die Sommerzeit ändert oder der Benutzer in ein anderes Land wechselt oder Datum, Uhrzeit oder Zeitzone manuell ändert), wird der Alarm zur falschen Ortszeit ausgelöst Das nächste Mal.
Beispiel:
Die App soll über einen längeren Zeitraum laufen (es handelt sich um eine Kiosk-App, die nur für Unternehmen bestimmt ist). Ich plane die Alarme neu, wenn die App gestartet wird, aber das löst mein Problem nicht, da die App Tage lang ohne Neustart ausgeführt werden kann. Ich muss erkennen, wann sich die Zeit ändert, um die Alarme entsprechend der neuen Ortszeit erneut zu planen.
Ich benutze diesen Empfänger:
%Vor%Er erkennt die Datumsänderung, funktioniert aber nicht mit Zeitänderungen oder Zeitzonenänderungen. (Getestet auf einem Tablet mit OS 4.0.3). Es ist wirklich merkwürdig, denn ich kann deutlich sehen, dass die Ereignisse in logcat übertragen werden.
Also meine Fragen:
ACTION_TIMEZONE_CHANGED
und ACTION_TIME_CHANGED
nicht von meinem BroadcastReceiver empfangen und wie kann ich das Problem lösen? Vielen Dank im Voraus.
Sie sollten
verwenden %Vor%Anstelle von
%Vor%Siehe ACTION_TIMEZONE_CHANGED und ACTION_TIME_CHANGED . Und beobachten Sie den Wert für diese Konstanten.
Und für DST-Änderungen lesen Handelt Android AlarmManager Sommerzeit Änderungen?
Tags und Links java android alarmmanager dst broadcastreceiver