Unter Android 10 (API-Level 29) und höher gelten Einschränkungen für den Start von Aktivitäten durch Apps, wenn die App im Hintergrund ausgeführt wird. Diese Einschränkungen tragen dazu bei, Unterbrechungen für den Nutzer zu minimieren und ihm mehr Kontrolle darüber zu geben, was auf seinem Bildschirm angezeigt wird.
In diesem Leitfaden werden Benachrichtigungen als Alternative zum Starten von Aktivitäten im Hintergrund vorgestellt. Außerdem werden die spezifischen 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 zu geben, anstatt direkt eine Aktivität zu starten. Dazu gehören beispielsweise eingehende Anrufe oder aktive Wecker.
Dieses benachrichtigungsbasierte Benachrichtigungs- und Erinnerungssystem bietet Nutzern mehrere Vorteile:
- Wenn der Nutzer das Gerät verwendet, wird eine Benachrichtigung angezeigt, über die er antworten kann. Der Nutzer behält seinen aktuellen Kontext bei und hat die Kontrolle über die Inhalte, die auf dem Bildschirm angezeigt werden.
- Zeitkritische Benachrichtigungen berücksichtigen die Bitte nicht stören-Regeln des Nutzers. Nutzer können beispielsweise festlegen, dass Anrufe nur von bestimmten Kontakten oder von wiederholten Anrufern durchgestellt werden, wenn der Bitte nicht stören-Modus aktiviert ist.
- Wenn das Display des Geräts deaktiviert ist, wird der Vollbild-Intent sofort gestartet.
- Auf dem Bildschirm Einstellungen des Geräts kann der Nutzer sehen, welche Apps in letzter Zeit Benachrichtigungen gesendet haben, auch über bestimmte Benachrichtigungskanäle. Auf diesem Bildschirm kann der Nutzer seine Benachrichtigungseinstellungen verwalten.
Wann können Apps Aktivitäten starten?
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 des Vordergrund-Tasks.
Die App hat eine Aktivität im Backstack einer vorhandenen Aufgabe auf dem Bildschirm „Zuletzt verwendet“.
Die App hat eine Aktivität, die erst vor Kurzem gestartet wurde.
Die App mit dem Namen
finish()
hat vor Kurzem eine Aktivität ausgeführt. 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 an das System gebunden ist. Für diese Dienste muss möglicherweise eine Benutzeroberfläche gestartet werden.
AccessibilityService
AutofillService
CallRedirectionService
HostApduService
InCallService
TileService
(gilt nicht für 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 sichtbar bleiben, damit die App im Hintergrund Aktivitäten starten kann.
Die App erhält vom System eine Benachrichtigung
PendingIntent
. Bei ausstehenden Intents für Dienste und Broadcast-Empfä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 einen System-Broadcast, bei dem erwartet wird, dass die App eine Benutzeroberfläche startet. Beispiele sind
ACTION_NEW_OUTGOING_CALL
undSECRET_CODE_ACTION
. Die App kann Aktivitäten einige Sekunden nach dem Senden des Broadcasts 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 Nutzer erteilt der App die Berechtigung
SYSTEM_ALERT_WINDOW
.
Opt-in erforderlich, wenn Aktivitäten über PendingIntents gestartet werden
Um zu verhindern, dass Aktivitäten versehentlich auf Grundlage der aufgeführten Bedingungen gestartet werden, gibt es ab Android 14 explizite APIs, mit denen Sie einer App Berechtigungen zum Starten von Aktivitäten erteilen oder entziehen können.
Bei Apps, die auf Android 15 oder höher ausgerichtet sind, werden die Berechtigungen zum Starten von Hintergrundaktivitäten (Background Activity Launch, BAL) für PendingIntents
, die sie erstellen, standardmäßig nicht mehr implizit gewährt. Dafür ist eine explizite Einwilligung erforderlich. Je nachdem, ob die App PendingIntents
sendet oder erstellt, haben Sie folgende Möglichkeiten:
Vom Absender des PendingIntent
Apps, die auf Android 14 oder höher ausgerichtet sind und ein PendingIntent
starten möchten, müssen
- die aufgeführten Bedingungen und
- Aktivieren Sie die Option, um den Start von Hintergrundaktivitäten basierend auf diesen Ausnahmen zuzulassen.
Diese Einwilligung sollte nur erfolgen, wenn der App-Entwickler weiß, dass die App eine Aktivität starten wird.
Um die Funktion zu aktivieren, muss die App ein ActivityOptions
-Bundle mit setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
an die Methode PendingIntent.send()
oder ähnliche Methoden übergeben.
Vom Creator des PendingIntent
Apps, die auf Android 15 oder höher ausgerichtet sind und eine PendingIntent
erstellen, müssen jetzt explizit zustimmen, dass Hintergrundaktivitäten gestartet werden dürfen, wenn sie möchten, dass diese PendingIntents
unter den aufgeführten Bedingungen gestartet werden können.
In den meisten Fällen sollte die App, die den PendingIntent
startet, diejenige sein, die sich anmeldet.
Wenn die erstellende App diese Berechtigungen jedoch gewähren muss:
- Die
PendingIntent
kann jederzeit gestartet werden, wenn die erstellende App sichtbar ist. - Die
PendingIntent
kann jederzeit gestartet werden, wenn die erstellende App spezielle Berechtigungen hat.
Um die Funktion zu aktivieren, muss die App ein ActivityOptions
-Bundle mit setPendingIntentCreatorBackgroundActivityStartMode
(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
an die Methode PendingIntent.getActivity()
oder ähnliche Methoden übergeben.
Weitere Informationen finden Sie in der entsprechenden Referenzdokumentation:
ActivityOptions.setPendingIntentBackgroundActivityStartMode
ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode
Strenger Modus
Ab Android 16 kann der App-Entwickler den Strengen Modus aktivieren, um benachrichtigt zu werden, wenn ein Aktivitätsstart blockiert wird oder das Risiko einer Blockierung besteht, wenn das Ziel-SDK der App angehoben wird.
Beispielcode zum Aktivieren in der Application.onCreate()
-Methode Ihrer Anwendung, Aktivität oder einer anderen Anwendungskomponente:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
StrictMode.setVmPolicy(
StrictMode.VmPolicy.Builder()
.detectBlockedBackgroundActivityLaunch()
.penaltyLog()
.build());
)
}
Weitere Informationen finden Sie in der Dokumentation zum strengen Modus.