Alarmy precyzyjne są domyślnie odrzucane.

Precyzyjne alarmy są przeznaczone dla powiadomień z zamiarem użytkownika lub działań, które wymagają w określonym momencie.

SCHEDULE_EXACT_ALARM, uprawnienie wprowadzone w Androidzie 12, które pozwala aplikacjom na planowanie dokładnych alarmów, nie jest już przyznawane domyślnie większości nowo zainstalowanych aplikacji kierowanych na Androida 13 i nowszych (domyślnie będzie odrzucone). Jeśli użytkownik przeniesie dane aplikacji na urządzenie z Androidem 14 podczas operacji tworzenia kopii zapasowej i przywracania, uprawnienia nadal zostaną odrzucone. 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:

.

Nadal obowiązują sprawdzone metody dotyczące uprawnienia SCHEDULE_EXACT_ALARM, 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 kalendarza i budzika powinny deklarować uprawnienie 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 normalne uprawnienia USE_EXACT_ALARM. Uprawnienia USE_EXACT_ALARM zostaną przyznane podczas instalacji, a aplikacje z tymi uprawnieniami będą mogły planować dokładne alarmy tak samo jak aplikacje 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 powtarzających się działań w trakcie trwania aplikacji;
Metoda set() jest przydatna, jeśli zadanie musi być wykonywane z uwzględnieniem ograniczeń czasu rzeczywistego, np. ma się zakończyć jutro o 20:00 lub za 30 minut. W przeciwnym razie zalecamy użycie metody postAtTime() lub postDelayed().
zaplanowane działanie 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 nastąpić po określonym czasie;
Użyj alarmu nieprecyzyjnego. a konkretnie – wywołaj set().
Określone przez użytkownika działanie, które może wystąpić w określonym przedziale czasu
Użyj alarmu nieprecyzyjnego. W szczególności zadzwoń pod numer setWindow(). Pamiętaj, że minimalna dozwolona długość okna to 10 minut.

Kroki migracji, aby nadal używać alarmów precyzyjnych

Przed zaplanowaniem alarmu precyzyjnego aplikacje muszą co najmniej sprawdzić, czy mają to uprawnienie. Jeśli aplikacja nie ma uprawnień, musi poprosić o nie użytkownika, wywołując intencję.

Jest to ten sam proces co w przypadku standardowego żądania specjalnego uprawnienia:

  1. Aplikacje powinny wywołać usługę AlarmManager.canScheduleExactAlarms(), aby potwierdzić, że mają odpowiednie uprawnienia.
  2. Jeśli aplikacja nie ma uprawnienia, wywołaj intencję, która zawiera ACTION_REQUEST_SCHEDULE_EXACT_ALARM oraz nazwę pakietu aplikacji, aby poprosić użytkowników o przyznanie uprawnienia.

    Sprawdź decyzję użytkownika w metodzie onResume() aplikacji.

  3. Słuchaj AlarmManager.ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGEDtransmisji, które są wysyłane, jeśli użytkownik przyzna uprawnienia.

  4. Jeśli użytkownik przyznał aplikacji odpowiednie uprawnienia, może ona ustawiać dokładne alarmów. Jeśli użytkownik odmówi udzielenia uprawnień, zmniejsz funkcjonalność aplikacji, aby udostępniała użytkownikowi funkcje bez informacji chronionych przez te uprawnienia.

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 plikach 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 mogą odmówić przyznania uprawnień. 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.

Wyjątki

Poniższe typy aplikacji zawsze mogą wywoływać metodę setExact() lub setExactAndAllowWhileIdle() metod:

  • Aplikacje podpisane certyfikatem platformy.
  • Aplikacje z podwyższonymi uprawnieniami.
  • Aplikacje, które znajdują się na liście zezwalającej na korzystanie z możliwości (jeśli Twoja aplikacja spełnia wymagania, możesz poprosić o to za pomocą działania intencyjnego ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).

Przed uwierzytelnieniem

Wskazówki 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.