Unter Android 10 (API-Level 29) und höher gelten Einschränkungen für das Starten von Aktivitäten durch Apps, die im Hintergrund ausgeführt werden. Diese Einschränkungen tragen dazu bei, Unterbrechungen für Nutzer zu minimieren und ihnen mehr Kontrolle darüber zu geben, was auf ihrem Bildschirm angezeigt wird.
In diesem Leitfaden werden Benachrichtigungen als Alternative zum Starten von Aktivitäten im Hintergrund vorgestellt. Außerdem werden die Fälle aufgeführt, in denen die Einschränkung nicht gilt.
Stattdessen Benachrichtigungen anzeigen
In fast allen Fällen müssen Apps im Hintergrund zeitkritische Benachrichtigungen anzeigen, um dem Nutzer dringende Informationen zur Verfügung zu stellen, anstatt direkt eine Aktivität zu starten. Dazu gehören beispielsweise eingehende Anrufe oder ein aktiver Wecker.
Dieses benachrichtigungsbasierte Benachrichtigungs- und Erinnerungssystem bietet Nutzern mehrere Vorteile:
- Wenn der Nutzer das Gerät verwendet, wird ihm eine Push-Benachrichtigung angezeigt, über die er reagieren kann. Der Nutzer behält seinen aktuellen Kontext bei und hat die Kontrolle über die Inhalte, die er auf dem Bildschirm sieht.
- Für zeitkritische Benachrichtigungen gelten die „Bitte nicht stören“-Regeln des Nutzers. So können Nutzer beispielsweise festlegen, dass sie nur von bestimmten Kontakten oder von wiederholten Anrufern angerufen werden möchten, wenn „Bitte nicht stören“ aktiviert ist.
- Wenn das Display des Geräts ausgeschaltet ist, wird die Vollbild-Intent sofort gestartet.
- Auf dem Bildschirm Einstellungen des Geräts sehen Nutzer, welche Apps in letzter Zeit Benachrichtigungen gesendet haben, einschließlich bestimmter Benachrichtigungskanäle. Auf diesem Bildschirm können Nutzer ihre Benachrichtigungseinstellungen verwalten.
Wann Apps Aktivitäten starten können
Apps, die unter Android 10 oder höher ausgeführt werden, können Aktivitäten starten, wenn eine oder mehrere der folgenden Bedingungen erfüllt sind:
- Die App hat ein sichtbares Fenster, z. B. eine Aktivität im Vordergrund.
- Die App hat eine Aktivität im Backstack der Aufgabe im Vordergrund.
Die App hat eine Aktivität im Backstack einer vorhandenen Aufgabe auf dem Bildschirm „Zuletzt“.
Die App hat eine Aktivität, die vor Kurzem gestartet wurde.
Die App
finish()
wurde vor Kurzem aufgrund einer Aktivität aufgerufen. Dies gilt nur, wenn die App zum Zeitpunkt des Aufrufs vonfinish()
entweder eine Aktivität im Vordergrund oder eine Aktivität im Backstack der Vordergrundaufgabe hatte.Die App hat einen der folgenden Dienste, der vom System gebunden ist. Für diese Dienste muss möglicherweise eine Benutzeroberfläche gestartet werden.
AccessibilityService
AutofillService
CallRedirectionService
HostApduService
InCallService
TileService
(nicht unter Android 14 (API-Level 34) und höher)VoiceInteractionService
VrListenerService
.
Die App hat einen Dienst, der an eine andere sichtbare App gebunden ist. Die an den Dienst gebundene App muss für die App im Hintergrund sichtbar bleiben, damit Aktivitäten erfolgreich gestartet werden können.
Die App erhält eine Benachrichtigung
PendingIntent
vom System. Bei ausstehenden Intents für Dienste und Broadcastempfänger kann die App einige Sekunden nach dem Senden des ausstehenden Intents Aktivitäten starten.Die App empfängt eine
PendingIntent
, die von einer anderen sichtbaren App gesendet wird.Die App empfängt eine Systemübertragung, bei der die App eine Benutzeroberfläche starten soll. Beispiele sind
ACTION_NEW_OUTGOING_CALL
undSECRET_CODE_ACTION
. Die App kann einige Sekunden nach dem Senden der Übertragung Aktivitäten starten.Die App ist über die
CompanionDeviceManager
API mit einem Companion-Hardwaregerät verknüpft. Mit dieser API kann die App Aktivitäten als Reaktion auf Aktionen starten, die der Nutzer auf einem gekoppelten Gerät ausführt.Die App ist ein Device Policy Controller, der im Modus „Geräteeigentümer“ ausgeführt wird. Beispiele für Anwendungsfälle sind vollständig verwaltete Unternehmensgeräte sowie spezielle Geräte wie digitale Beschilderung und Kioske.
Der App wird vom Nutzer die Berechtigung
SYSTEM_ALERT_WINDOW
gewährt.
Aktivieren erforderlich, wenn Aktivitäten über PendingIntents gestartet werden
Um versehentliches Starten von Aktivitäten aufgrund der aufgeführten Bedingungen zu vermeiden, gibt es ab Android 14 explizite APIs, mit denen Sie festlegen können, ob einer App Berechtigungen für das Starten von Aktivitäten erteilt werden sollen.
In Apps, die auf Android 15 oder höher ausgerichtet sind, werden von PendingIntents
, die von der App erstellt werden, standardmäßig keine Berechtigungen mehr für den Start von Hintergrundaktivitäten gewährt. Es ist eine explizite Einwilligung erforderlich. Je nachdem, ob die App PendingIntents
sendet oder erstellt, stehen folgende Optionen zur Verfügung:
Vom Absender des PendingIntents
Apps, die auf Android 14 oder höher ausgerichtet sind und eine PendingIntent
starten möchten, müssen
- die aufgeführten Bedingungen erfüllen und
- Sie können festlegen, dass Hintergrundaktivitäten auf Grundlage dieser Ausnahmen gestartet werden dürfen.
Diese Einwilligung sollte nur erfolgen, wenn der App-Entwickler weiß, dass die App eine Aktivität startet.
Wenn Sie die Funktion aktivieren möchten, muss die App ein ActivityOptions
-Bundle mit setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
an die PendingIntent.send()
-Methode oder eine ähnliche Methode übergeben.
Vom Ersteller des PendingIntent
Bei Apps, die auf Android 15 oder höher ausgerichtet sind und eine PendingIntent
erstellen, muss jetzt ausdrücklich der Start von Hintergrundaktivitäten zugelassen werden, damit diese PendingIntents
unter den angegebenen Bedingungen gestartet werden können.
In den meisten Fällen sollte die App, die die PendingIntent
startet, die Funktion aktivieren.
Wenn die App, die erstellt wird, jedoch diese Berechtigungen gewähren muss:
- Der
PendingIntent
kann jederzeit gestartet werden, wenn die erstellte App sichtbar ist. - Die
PendingIntent
kann jederzeit gestartet werden, wenn die App, die sie erstellt, spezielle Berechtigungen hat.
Wenn Sie die Funktion aktivieren möchten, muss die App ein ActivityOptions
-Bundle mit setPendingIntentCreatorBackgroundActivityStartMode
(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
an die PendingIntent.getActivity()
-Methode oder eine ähnliche Methode übergeben.
Weitere Informationen finden Sie in der entsprechenden Referenzdokumentation:
ActivityOptions.setPendingIntentBackgroundActivityStartMode
ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode