Precyzyjne alarmy są przeznaczone dla powiadomień z zamiarem użytkownika lub działań, które wymagają w określonym momencie.
SCHEDULE_EXACT_ALARM
, czyli wprowadzone w Androidzie 12 uprawnienia, które aplikacje mogą
zaplanuj alarmy precyzyjne, nie jest już wstępnie przyznawany większości nowo zainstalowanych systemów
aplikacji kierowanych na Androida 13 i nowsze wersje (domyślnie ta opcja jest odrzucana). Jeśli
użytkownik przenosi dane aplikacji na urządzenie z Androidem 14 za pomocą
tworzenia i przywracania kopii zapasowej, uprawnienia nadal nie będą dostępne. Jeśli
istniejąca aplikacja ma już to uprawnienie. Zostanie ono przyznane wstępnie, gdy urządzenie
aktualizacji do Androida 14.
Do inicjowania alarmów precyzyjnych wymagane jest uprawnienie SCHEDULE_EXACT_ALARM
za pomocą tych interfejsów API lub zostanie zgłoszone SecurityException
:
Dotychczasowe sprawdzone metody dotyczące uprawnienia SCHEDULE_EXACT_ALARM
są nadal dostępne.
zastosowanie, w tym:
- Przed zaplanowaniem sprawdź uprawnienia u użytkownika
canScheduleExactAlarms()
alarmy precyzyjne. - Skonfiguruj aplikację, aby nasłuchiwać transmisji na pierwszym planie i odpowiednio na nią reagować
AlarmManager.ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED
wysyłane przez system po przyznaniu uprawnień przez użytkownika.
Aplikacje, w których wystąpiła awaria
Jeśli na urządzeniu działa Android 14 lub nowszy, ta zmiana będzie mieć wpływ zainstalowana aplikacja, która ma te cechy:
- Jest kierowana na Androida 13 (poziom interfejsu API 33) lub nowszego.
- Deklaruje w pliku manifestu uprawnienia
SCHEDULE_EXACT_ALARM
. - nie podlega wyjątkowi ani wstępnemu przyznaniu;
- nie jest aplikacją kalendarza ani budzika.
Aplikacje do obsługi kalendarza i budzika powinny zadeklarować USE_EXACT_ALARM
Aplikacje kalendarza lub budzika muszą wysyłać przypomnienia z kalendarza lub budzik.
alarmy czy alerty, gdy aplikacja nie jest już uruchomiona. Te aplikacje mogą prosić o zgodę na:
USE_EXACT_ALARM
– normalne uprawnienie. Uprawnienia USE_EXACT_ALARM
zostaną przyznane podczas instalacji, a aplikacje z tymi uprawnieniami będą mogły planować
alarmy precyzyjne, tak jak w przypadku aplikacji z uprawnieniami SCHEDULE_EXACT_ALARM
.
Przypadki użycia, które mogą nie wymagać alarmów precyzyjnych
Ponieważ teraz uprawnienia SCHEDULE_EXACT_ALARM
są domyślnie odrzucane,
proces udzielania uprawnień wymaga od użytkowników dodatkowych czynności,
Zdecydowanie zachęca do oceny ich przypadków użycia i określenia, czy alarmy precyzyjne
które nadal mają sens w ich zastosowaniach.
Na liście poniżej znajdziesz typowe przepływy pracy, które mogą nie wymagać dokładnego alarmu:
- Planowanie powtarzalnej pracy przez cały okres istnienia aplikacji
- Metoda
set()
jest przydatna, gdy zadanie musi odbywać się w czasie rzeczywistym na przykład o 14:00 jutro lub za 30 minut. W innych przypadkach zaleca się użycie funkcjipostAtTime()
lubpostDelayed()
metod. - zaplanowane prace w tle, takie jak aktualizowanie aplikacji i przesyłanie dzienników;
WorkManager
umożliwia planowanie prac okresowych, w przypadku których czas jest istotny. Możesz podać interwał powtarzania i flexInterval (minimum 15 minut), aby oraz zdefiniować szczegółowe środowisko wykonawcze dla danej pracy.- Alarm musi zostać uruchomiony o przybliżonej godzinie, gdy system jest w stanie bezczynności
- Użyj alarmu nieprecyzyjnego. a konkretnie – wywołaj
setAndAllowWhileIdle()
. - Działanie określone przez użytkownika, które powinno zostać wykonane po określonym czasie
- Użyj alarmu nieprecyzyjnego. a konkretnie – wywołaj
set()
. - Działanie określone przez użytkownika, które może zostać wykonane w danym przedziale czasu.
- Użyj alarmu nieprecyzyjnego. a konkretnie – wywołaj
setWindow()
. Pamiętaj, że parametr najmniejsza dozwolona długość okna to 10 minut.
Etapy migracji w celu dalszego korzystania z alarmów precyzyjnych
Aplikacje muszą wcześniej sprawdzać, czy mają odpowiednie uprawnienia planowanie alarmów precyzyjnych. Jeśli aplikacje nie mają tych uprawnień, muszą o niego poprosić przez wywołanie intencji.
Działa to tak samo jak standardowy przepływ pracy prośby o specjalne uprawnienia:
- Aplikacje powinny zadzwonić pod numer
AlarmManager.canScheduleExactAlarms()
, aby potwierdzić że ma odpowiednie pozwolenie. Jeśli aplikacja nie ma tych uprawnień, wywołaj intencję zawierającą
ACTION_REQUEST_SCHEDULE_EXACT_ALARM
wraz z pakietem aplikacji aby poprosić użytkowników o przyznanie tych uprawnień.Sprawdź decyzję użytkownika w metodzie
onResume()
na swoim .Posłuchaj:
AlarmManager.ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED
komunikatów wysyłanych po udzieleniu uprawnień przez użytkownika.Jeśli użytkownik przyznał aplikacji odpowiednie uprawnienia, może ona ustawiać dokładne alarmów. Jeśli użytkownik odmówił przyznania uprawnień, zgrabnie obniż poziom uprawnień jak w aplikacji, tak aby zapewniała funkcjonalność użytkownika bez informacji chronionych tym uprawnieniem.
Fragment kodu poniżej pokazuje, jak sprawdzić
Uprawnienie SCHEDULE_EXACT_ALARM
:
val alarmManager: AlarmManager = context.getSystemService<AlarmManager>()!!
when {
// If permission is granted, proceed with scheduling exact alarms.
alarmManager.canScheduleExactAlarms() -> {
alarmManager.setExact(...)
}
else -> {
// Ask users to go to exact alarm page in system settings.
startActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM))
}
}
Przykładowy kod do sprawdzania uprawnień i obsługi decyzji użytkownika w
onResume()
:
override fun onResume() {
…
if (alarmManager.canScheduleExactAlarms()) {
// Set exact alarms.
alarmManager.setExact(...)
}
else {
// Permission not yet approved. Display user notice and revert to a fallback
// approach.
alarmManager.setWindow(...)
}
}
Sprytnie poniżaj w przypadku odmowy uprawnień
Niektórzy użytkownicy odmówią przyznania tego uprawnienia. W takim przypadku zalecamy aby płynnie wpływać na wygodę użytkowników, i jednocześnie staramy się zapewniać najlepsze możliwe wrażenia użytkowników zastępczych, identyfikując ich przypadki użycia.
Zwolnienia
Poniższe typy aplikacji zawsze mogą wywoływać metodę setExact()
lub
setExactAndAllowWhileIdle()
metod:
- Aplikacje podpisane certyfikatem platformy.
- Aplikacje z podwyższonymi uprawnieniami.
- aplikacje znajdujące się na liście dozwolonych uprawnień (jeśli aplikacja spełnia wymagania,
może poprosić o to za pomocą
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
działanie intencji).
Przed uwierzytelnieniem
- Właściciele ról
SYSTEM_WELLBEING
zostaną wstępnie przyznaneSCHEDULE_EXACT_ALARM
Wytyczne dotyczące testowania
Aby przetestować tę zmianę, wyłącz funkcję Alarmy i uprawnienia do przypomnień dla aplikacji. ze strony Aplikacje ze specjalnym dostępem w ustawieniach systemowych (Ustawienia > Aplikacje > Aplikacje ze specjalnym dostępem > Alarmy i przypomnienia) i obserwuj jej działanie.