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 mit Android 12 eingeführte Berechtigung für Apps, exakte Alarme planen, werden den meisten neu installierten Apps, die auf Android 13 und höher ausgerichtet sind (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 ein vorhandene App diese Berechtigung bereits hat, wird sie gewährt, wenn das Gerät auf Android 14 aktualisiert.

Die Berechtigung SCHEDULE_EXACT_ALARM ist erforderlich, um exakte Alarme auszulösen über die folgenden APIs oder eine SecurityException ausgelöst:

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 ausgeführt wird, wirkt sich diese Änderung auf neue installierte App mit den folgenden Merkmalen:

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

Kalender- und Wecker-Apps müssen USE_EXACT_ALARM angeben

Kalender- oder Wecker-Apps müssen Kalendererinnerungen, Weckzeiten und Alarme oder Warnungen, wenn die App nicht mehr ausgeführt wird. Diese Apps können die Normale Berechtigung USE_EXACT_ALARM. Mit der Berechtigung USE_EXACT_ALARM wird bei der Installation gewährt. Apps mit dieser Berechtigung können genau wie 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 verweigert wird, erfordert der Prozess der Erteilung von Berechtigungen zusätzliche Schritte von Nutzern. Entwickler müssen wird dringend geraten, ihre Anwendungsfälle zu untersuchen und festzustellen, ob exakte Alarme dennoch für ihre Anwendungsfälle sinnvoll sind.

Die folgende Liste zeigt gängige Arbeitsabläufe, für die möglicherweise kein exakter Alarm erforderlich ist:

Wiederholte 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 wird die Verwendung von postAtTime() oder postDelayed()-Methoden.
Geplante Hintergrundarbeiten wie das Aktualisieren der App und das Hochladen von Protokollen
WorkManager bietet die Möglichkeit, zeitabhängige regelmäßige Arbeiten zu planen. Sie können ein Wiederholungsintervall und flexInterval (mindestens 15 Minuten) angeben, um detaillierte Laufzeit für die Arbeit 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
Einen ungenauen Alarm verwenden. Rufen Sie insbesondere set() auf.
Vom Nutzer angegebene Aktion, die innerhalb eines Zeitfensters ausgeführt werden kann
Einen ungenauen Alarm verwenden. Rufen Sie insbesondere setWindow() auf. Das Feld Die kleinste zulässige Fensterlänge beträgt 10 Minuten.

Migrationsschritte zur weiteren Verwendung exakter Alarme

Apps müssen mindestens vor dem Update prüfen, ob sie die Berechtigung haben exakte Alarme zu planen. Wenn Apps nicht über die Berechtigung verfügen, müssen sie sie anfordern Nutzer durch Aufrufen eines Intents.

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 einen Intent auf, der den ACTION_REQUEST_SCHEDULE_EXACT_ALARM zusammen mit dem App-Paket , um Nutzer um die Erteilung der Berechtigung zu bitten.

    Prüfen Sie die Entscheidung des Nutzers in der onResume()-Methode Ihres

  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 die App Alarme. Wenn der Nutzer stattdessen die Berechtigung abgelehnt hat, schränken Sie Ihre App-Nutzererfahrung, sodass sie Funktionen ohne die Informationen, die durch diese Berechtigung geschützt werden.

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 zur Überprüfung der Berechtigung und zur Verarbeitung der 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 Degrad 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 immer die setExact() oder setExactAndAllowWhileIdle()-Methoden:

  • Mit dem Plattformzertifikat signierte Apps
  • Privilegierte Apps.
  • Apps, die auf der Zulassungsliste stehen (wenn Ihre App die Anforderungen erfüllt, können anfordern über den ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS Intent-Aktion).

Vorabzuschüsse

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.