Das Planen von genauen Weckern ist standardmäßig nicht zulässig

Exakte Alarme sind für vom Nutzer beabsichtigte Benachrichtigungen oder Aktionen gedacht, die zu einem bestimmten Zeitpunkt erfolgen.

SCHEDULE_EXACT_ALARM, die in Android 12 eingeführte Berechtigung, mit der Apps genaue Wecker stellen können, wird den meisten neu installierten Apps, die auf Android 13 und höher ausgerichtet sind, nicht mehr vorab gewährt. Sie wird standardmäßig auf „Abgelehnt“ gesetzt. Wenn überträgt der Nutzer App-Daten über eine Back-up- und Wiederherstellungsvorgang durchführen, wird die Berechtigung weiterhin verweigert. Wenn eine vorhandene App diese Berechtigung bereits hat, wird sie beim Upgrade des Geräts auf Android 14 vorab gewährt.

Die Berechtigung SCHEDULE_EXACT_ALARM ist erforderlich, um genaue Benachrichtigungen über die folgenden APIs zu starten. Andernfalls wird eine SecurityException geworfen:

Vorhandene Best Practices für die Berechtigung SCHEDULE_EXACT_ALARM gelten unter anderem:

Betroffene Apps

Wenn auf einem Gerät Android 14 oder höher installiert ist, wirkt sich diese Änderung auf eine neu installierte App mit den folgenden Eigenschaften aus:

  • Sie ist auf Android 13 (API-Level 33) oder höher ausgerichtet.
  • Deklariert die Berechtigung SCHEDULE_EXACT_ALARM im Manifest.
  • Sie fällt nicht unter eine Ausnahme oder Vorabgenehmigung. Szenario.
  • Keine Kalender- oder Wecker-App.

Kalender- und Wecker-Apps müssen USE_EXACT_ALARM deklarieren

Kalender- oder Wecker-Apps müssen Kalendererinnerungen, Wecker oder Benachrichtigungen senden, auch wenn die App nicht mehr aktiv ist. Diese Apps können die normale Berechtigung USE_EXACT_ALARM anfordern. Mit der Berechtigung USE_EXACT_ALARM wird bei der Installation gewährt. Apps mit dieser Berechtigung können genau wie bei Apps mit der Berechtigung SCHEDULE_EXACT_ALARM.

Anwendungsfälle, die möglicherweise keine genauen Alarme erfordern

Da die Berechtigung SCHEDULE_EXACT_ALARM jetzt standardmäßig abgelehnt wird und die Erteilung der Berechtigung zusätzliche Schritte von Nutzern erfordert, sollten Entwickler ihre Anwendungsfälle genau prüfen und entscheiden, ob genaue Benachrichtigungen für ihre Anwendungsfälle weiterhin sinnvoll sind.

In der folgenden Liste sind gängige Workflows aufgeführt, für die möglicherweise kein genauer Wecker erforderlich ist:

Wiederkehrende Aufgaben während der Lebensdauer Ihrer App planen
Die Methode set() ist nützlich, wenn die Aufgabe in Echtzeit erfolgen muss. z. B. morgen um 14:00 Uhr oder in 30 Minuten losgehen. Andernfalls empfehlen wir, stattdessen die Methoden postAtTime() oder postDelayed() zu verwenden.
Geplante Aufgaben im Hintergrund, z. B. das Aktualisieren Ihrer App und das Hochladen von Protokollen
WorkManager bietet die Möglichkeit, zeitabhängige regelmäßige Arbeiten zu planen. Sie können ein Wiederholungsintervall und ein Flex-Intervall (mindestens 15 Minuten) angeben, um die Laufzeit der Aufgabe detailliert zu definieren.
Der Alarm muss ungefähr zu einer bestimmten Zeit ausgelöst werden, während das System inaktiv ist
Einen ungenauen Alarm verwenden. Rufen Sie insbesondere setAndAllowWhileIdle() auf.
Vom Nutzer angegebene Aktion, die nach einer bestimmten Zeit ausgeführt werden soll
Verwenden Sie einen ungefähren Wecker. Rufen Sie dazu set() an.
Vom Nutzer angegebene Aktion, die innerhalb eines Zeitfensters ausgeführt werden kann
Einen ungenauen Alarm verwenden. Rufen Sie dazu setWindow() an. Das Feld Die kleinste zulässige Fensterlänge beträgt 10 Minuten.

Migrationsschritte, um weiterhin exakte Wecker zu verwenden

Apps müssen mindestens prüfen, ob sie die Berechtigung haben, bevor sie exakte Wecker stellen. Wenn Apps die Berechtigung nicht haben, müssen sie sie vom Nutzer anfordern, indem sie einen Intent aufrufen.

Dieser Ablauf entspricht dem Standardablauf für die Anforderung einer speziellen Berechtigung:

  1. Apps sollten zur Bestätigung AlarmManager.canScheduleExactAlarms() anrufen ob sie die entsprechende Berechtigung hat.
  2. Wenn die App nicht über die Berechtigung verfügt, rufen Sie eine Intent auf, die ACTION_REQUEST_SCHEDULE_EXACT_ALARM und den Paketnamen der App enthält, um Nutzer aufzufordern, die Berechtigung zu gewähren.

    Prüfen Sie die Entscheidung des Nutzers in der Methode onResume() Ihrer App.

  3. Achten Sie auf das Ereignis AlarmManager.ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED Broadcasts, die gesendet werden, wenn der Nutzer die Berechtigung dazu erteilt.

  4. Wenn der Nutzer Ihrer App die Berechtigung erteilt hat, kann Ihre App exakte Wecker stellen. Wenn der Nutzer die Berechtigung stattdessen abgelehnt hat, reduzieren Sie die Funktionalität der App, damit der Nutzer Funktionen ohne die durch diese Berechtigung geschützten Informationen nutzen kann.

Das folgende Code-Snippet zeigt, wie Sie auf den Berechtigung 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))
   }
}

Beispielcode zum Prüfen der Berechtigung und zum Umgang mit den Entscheidungen des Nutzers in 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(...)
   }
}

Graceful Degradation bei Berechtigungsverweigerung

Einige Nutzer werden die Berechtigung nicht erteilen. In diesem Fall empfehlen wir, die Nutzerfreundlichkeit zu verbessern und gleichzeitig Nutzer auf mögliche Fallbacks hinweisen, indem Sie ihre Anwendungsfälle ermitteln.

Ausnahmen

Die folgenden Arten von Apps dürfen die Methoden setExact() oder setExactAndAllowWhileIdle() immer aufrufen:

Vor Zuschüssen

Testrichtlinien

Deaktivieren Sie zum Testen dieser Änderung die Option Alarme & Erinnerungen für Ihre App in den Systemeinstellungen von der Seite Spezieller App-Zugriff (Einstellungen > Apps > Spezieller App-Zugriff > Wecker und Erinnerungen) und beobachten Sie das Verhalten Ihrer App.