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:
- Prüfen Sie die Berechtigung mit
canScheduleExactAlarms()
, bevor Sie exakte Wecker planen. - Richte deine App so ein, dass sie auf die Übertragung im Vordergrund achten und richtig darauf reagiert
AlarmManager.ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED
, den das System sendet, wenn der Nutzer die Berechtigung erteilt.
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 MethodenpostAtTime()
oderpostDelayed()
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:
- Apps sollten zur Bestätigung
AlarmManager.canScheduleExactAlarms()
anrufen ob sie die entsprechende Berechtigung hat. 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.Achten Sie auf das Ereignis
AlarmManager.ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED
Broadcasts, die gesendet werden, wenn der Nutzer die Berechtigung dazu erteilt.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:
- Mit dem Plattformzertifikat signierte Apps
- Apps mit erhöhten Berechtigungen
- Apps, die auf der Zulassungsliste für die Funktion „Hey Google“ stehen. Wenn Ihre App die Anforderungen erfüllt, können Sie dies mithilfe der Intent-Aktion
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
beantragen.
Vor Zuschüssen
- Rolleninhabern von
SYSTEM_WELLBEING
werden vorab gewährtSCHEDULE_EXACT_ALARM
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.