Harmonogram alarmów precyzyjnych jest domyślnie zabroniony

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:

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:

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 funkcji postAtTime() lub postDelayed() 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:

  1. Aplikacje powinny zadzwonić pod numer AlarmManager.canScheduleExactAlarms(), aby potwierdzić że ma odpowiednie pozwolenie.
  2. 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 .

  3. Posłuchaj: AlarmManager.ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED komunikatów wysyłanych po udzieleniu uprawnień przez użytkownika.

  4. 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

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.