Chciałbym osiągnąć to:Codzienne powiadomienia w określonym czasie
Po pierwszym włączeniu aplikacji, użytkownik otrzymuje powiadomienia, codziennie o godzinie 14.00, jeśli spełniony jest pewien warunek. Jeśli warunek jest fałszywy, nie wyświetlamy powiadomienia w tym dniu. Warunek jest sprawdzany o godzinie 14:00, pobiera niektóre dane z Internetu.
Do tej pory użyłem AlarmManager i jego metody setRepeating() z interwałem 24h. AlarmManager uruchamia się pod numerem Service. W tej usłudze pobieram dane, sprawdzam warunek i jeśli to prawda - pokazując Notification. Ponieważ pobieranie może trwać dłużej niż 5 sekund, zadeklarowałem android:process=":background"
dla tej usługi, aby uruchomić ją w oddzielnym procesie i nie blokować mojego interfejsu użytkownika.
Podejście to ma dwie wady:
1: Jeśli użytkownik otworzy aplikację powiedzmy na 4pm (a warunek jest prawdą), otrzyma powiadomienie natychmiast. Od setRepeating() dokumentacji:
Jeśli wystąpi razem w przeszłości, alarm zostanie wyzwolony natychmiast, z liczby alarmów w zależności od tego, jak daleko w przeszłość czas wyzwalania jest w stosunku do powtarzania przedziału.
Chciałbym, aby ten użytkownik nie otrzymał powiadomienia w tym dniu, tylko następnego dnia i tak dalej.
2: Obawiam się, że moje powiadomienia nie będą wyświetlane po wyłączeniu telefonu przez użytkownika. Od AlarmManager dokumentacji:
Zarejestrowane alarmy są zatrzymywane, gdy urządzenie jest w trybie uśpienia (i ewentualnie może obudzić urządzenie w górę, jeśli zgaśnie w tym czasie), ale zostaną usunięte, jeśli jest wyłączony i ponownie uruchomiony.
Nie wiem, czy to możliwe, aby działało przez cały czas.
Jeśli masz jakieś pomysły, jak je poprawić, nie ma za co.
Jest to dobra sugestia, ja też używam tego – slinden77
Dziękuję bardzo! Mam pytanie, czy jesteś pewien, że: twopm.set (GregorianCalendar.HOUR, 2) ustawia godzinę PM, a nie AM? Może powinienem użyć twoPm.set (GregorianCalendar.HOUR_OF_DAY, 14)? –
tak, masz rację – AntonS