Przede wszystkim trochę tutorial jak uzyskać dostęp do wcześniej utworzonych alarmów:
Można rozróżnić alarmy tworząc każdy z unikalnym identyfikatorem takich jak:
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,UNIQUE_ID_GOES_HERE, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);
Jeżeli chcesz uzyskać dostęp do ten alarm, musisz utworzyć ten sam PendingIntent z tym samym unikalnym identyfikatorem. Na przykład, poniższe będą miały dostęp tylko do alarmu utworzonego za pomocą PendingIntent id 1234. Następnie anuluje on poprzedni i resetuje go.
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 1234, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);
Pomysł jest prosty. Śledź identyfikatory, a następnie użyj ich, aby uzyskać dostęp do odpowiednich alarmów. Jeśli utworzysz wiele alarmów o tym samym identyfikatorze, ostatni z nich anuluje poprzednie.
Przechodząc do głównego problemu, zamiast sprawdzać, czy alarm jest aktywny przy każdym uruchomieniu aplikacji, po prostu przestaw go ponownie w swojej metodzie onCreate()
. z tym samym PendingIntentem, jak opisałem powyżej. To oszczędza Ci kłopotów z sprawdzeniem, czy alarm został wcześniej ustawiony, czy nie. Ponieważ Twoim celem jest utrzymanie alarmu przy życiu, nie zaszkodzi to zastąpić wcześniej ustawionym za każdym razem, gdy uruchomisz aplikację. Po prostu upewnij się, że używasz tego samego identyfikatora, aby utworzyć swój PendingIntent.
Nie zapomnij sprawdzić, czy godzina alarmu już minęła, aby uniknąć próby ustawienia alarmu na czas przeszły, który natychmiast go wyzwoli.
Rozważmy inny przypadek: po wyłączeniu urządzenia wszystkie alarmy zostaną anulowane. Nie pozostawia ci to żadnej opcji, ale ustawia je ponownie przy ponownym uruchomieniu komputera. Aby to zrobić, będziesz musiał użyć BroadcastReceiver.
This answer pomoże ci, jak to zrobić. Po prostu odtwórz swój alarm w metodzie onReceive() twojego BroadcastReceiver, jak zasugerowano powyżej.
Cześć dzięki za miejsce pracy ... Ale co będzie, gdy nie będę działał ... mój boot zakończony odbiornik nie będzie działał w takim przypadku (sprawa z Androidem w wersji 3.0) ... Więc jak wymyślić to ... Ponieważ pracuję nad taką aplikacją, że nie chcą żadnej aktywności ... jak zarejestrować tego odbiorcę .. – NullPointerException
Musisz tylko użyć tagów. Sprawdź to: http: //developer.android.com/guide/topics/manifest/receiver-element.html. Jeśli używasz usługi do tworzenia alarmu, musisz zmienić nazwę działania powyżej na swoją nazwę klasy usług. –
Erol
Dobrze! ta jest najlepszą odpowiedzią, więc ją nagradzam !! – NullPointerException