Apps, die auf Android 12 (API‑Level 31) oder höher ausgerichtet sind, können keine Dienste im Vordergrund starten, während die App im Hintergrund ausgeführt wird. Es gibt jedoch einige Ausnahmen. Wenn eine App versucht, einen Dienst im Vordergrund zu starten, während sie im Hintergrund ausgeführt wird, und der Dienst im Vordergrund nicht einem der Ausnahmefälle entspricht, löst das System eine ForegroundServiceStartNotAllowedException
aus.
Wenn eine App einen Dienst im Vordergrund starten möchte, für den Berechtigungen zur Verwendung während der Nutzung erforderlich sind (z. B. Berechtigungen für Körpersensor, Kamera, Mikrofon oder Standort), kann der Dienst nicht erstellt werden, während die App im Hintergrund ausgeführt wird, auch wenn die App unter eine der Ausnahmen von den Einschränkungen für den Start im Hintergrund fällt. Der Grund dafür wird im Abschnitt Einschränkungen beim Starten von Vordergrunddiensten, für die Berechtigungen für die Verwendung während der Nutzung erforderlich sind erläutert.
Ausnahmen von Einschränkungen beim Start im Hintergrund
In den folgenden Situationen kann Ihre App Dienste im Vordergrund starten, auch wenn sie im Hintergrund ausgeführt wird:
- Ihre App wechselt aus einem für den Nutzer sichtbaren Zustand, z. B. einer Aktivität.
- Ihre App kann eine Aktivität im Hintergrund starten, es sei denn, die App hat eine Aktivität im Backstack einer vorhandenen Aufgabe.
Ihre App empfängt eine Nachricht mit hoher Priorität über Firebase Cloud Messaging.
Der Nutzer führt eine Aktion für ein UI-Element aus, das mit Ihrer App verknüpft ist. Er interagiert beispielsweise mit einer Blase, einer Benachrichtigung, einem Widget oder einer Aktivität.
Ihre App ruft einen exakten Alarm auf, um eine vom Nutzer angeforderte Aktion auszuführen.
Ihre App ist die aktuelle Eingabemethode des Geräts.
Ihre App empfängt ein Ereignis, das mit Geofencing oder dem Übergang zur Aktivitätserkennung zusammenhängt.
Nachdem das Gerät neu gestartet wurde und die Intent-Aktion
ACTION_BOOT_COMPLETED
,ACTION_LOCKED_BOOT_COMPLETED
oderACTION_MY_PACKAGE_REPLACED
in einem Broadcast-Receiver empfangen hat.Ihre App empfängt die Intent-Aktion
ACTION_TIMEZONE_CHANGED
,ACTION_TIME_CHANGED
oderACTION_LOCALE_CHANGED
in einem Broadcast-Empfänger.Ihre App empfängt das Ereignis
ACTION_TRANSACTION_DETECTED
vonNfcService
.Apps mit bestimmten Systemrollen oder Berechtigungen, z. B. Geräteinhaber und Profilinhaber.
Ihre App verwendet den Companion Device Manager und deklariert die Berechtigung
REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND
oder die BerechtigungREQUEST_COMPANION_RUN_IN_BACKGROUND
. Verwenden Sie nach MöglichkeitREQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND
.Der Nutzer deaktiviert die Akku-Optimierung für Ihre App.
Ihre App hat die Berechtigung
SYSTEM_ALERT_WINDOW
. Hinweis: Wenn Ihre App auf Android 15 oder höher ausgerichtet ist, muss sie die BerechtigungSYSTEM_ALERT_WINDOW
haben und derzeit ein sichtbares Overlay-Fenster anzeigen.
Einschränkungen beim Starten von Diensten im Vordergrund, für die Berechtigungen für die Nutzung während der Verwendung erforderlich sind
Unter Android 14 (API‑Level 34) oder höher gibt es besondere Situationen, die Sie beachten müssen, wenn Sie einen Dienst im Vordergrund starten, für den Berechtigungen für die Verwendung während der Nutzung erforderlich sind.
Wenn Ihre App auf Android 14 oder höher ausgerichtet ist, prüft das Betriebssystem beim Erstellen eines Dienstes im Vordergrund, ob Ihre App alle erforderlichen Berechtigungen für diesen Diensttyp hat. Wenn Sie beispielsweise einen Vordergrunddienst vom Typ Mikrofon erstellen, prüft das Betriebssystem, ob Ihre App derzeit die Berechtigung RECORD_AUDIO
hat. Wenn Sie diese Berechtigung nicht haben, gibt das System eine SecurityException
aus.
Bei Berechtigungen, die während der Nutzung erforderlich sind, kann dies zu einem Problem führen. Wenn Ihre App die Berechtigung „Bei Verwendung der App“ hat, ist diese Berechtigung nur im Vordergrund verfügbar. Wenn Ihre App also im Hintergrund ausgeführt wird und versucht, einen Vordergrunddienst vom Typ „Kamera“, „Standort“ oder „Mikrofon“ zu erstellen, erkennt das System, dass Ihre App derzeit nicht die erforderlichen Berechtigungen hat, und löst eine SecurityException
aus.
Wenn Ihre App im Hintergrund ausgeführt wird und einen Gesundheitsdienst erstellt, der die Berechtigung BODY_SENSORS
benötigt, hat die App diese Berechtigung derzeit nicht und das System löst eine Ausnahme aus.
Das gilt nicht, wenn es sich um einen Gesundheitsdienst handelt, der andere Berechtigungen wie ACTIVITY_RECOGNITION
benötigt. Der Aufruf von PermissionChecker.checkSelfPermission()
verhindert dieses Problem nicht. Wenn Ihre App eine Berechtigung zur Verwendung während der Nutzung hat und checkSelfPermission()
aufruft, um zu prüfen, ob sie diese Berechtigung hat, gibt die Methode PERMISSION_GRANTED
zurück, auch wenn sich die App im Hintergrund befindet. Wenn die Methode PERMISSION_GRANTED
zurückgibt, bedeutet das, dass Ihre App diese Berechtigung während der Nutzung der App hat.
Wenn Ihr Dienst im Vordergrund daher eine Berechtigung zur Standortermittlung während der Nutzung benötigt, müssen Sie Context.startForegroundService()
oder Context.bindService()
aufrufen, während Ihre App eine sichtbare Aktivität hat, es sei denn, der Dienst fällt unter eine der definierten Ausnahmen.
Ausnahmen von Einschränkungen für Berechtigungen bei Verwendung
In einigen Situationen kann eine App, auch wenn ein Dienst im Vordergrund gestartet wird, während die App im Hintergrund ausgeführt wird, weiterhin auf Standort-, Kamera- und Mikrofoninformationen zugreifen, während die App im Vordergrund ausgeführt wird („Bei Verwendung der App“).
Wenn der Dienst in diesen Situationen einen Typ des Diensts im Vordergrund vom Typ location
deklariert und von einer App gestartet wird, die die Berechtigung ACCESS_BACKGROUND_LOCATION
hat, kann dieser Dienst jederzeit auf Standortinformationen zugreifen, auch wenn die App im Hintergrund ausgeführt wird.
Die folgende Liste enthält diese Situationen:
- Eine Systemkomponente startet den Dienst.
- Der Dienst beginnt mit der Interaktion mit App-Widgets.
- Der Dienst wird durch Interaktion mit einer Benachrichtigung gestartet.
- Der Dienst wird als
PendingIntent
gestartet, die von einer anderen sichtbaren App gesendet wird. - Der Dienst wird von einer App gestartet, die ein Device Policy Controller ist und im Geräteinhabermodus ausgeführt wird.
- Der Dienst wird von einer App gestartet, die die
VoiceInteractionService
bereitstellt. - Der Dienst wird von einer App gestartet, die die Berechtigung
START_ACTIVITIES_FROM_BACKGROUND
hat.
Ermitteln, welche Dienste in Ihrer App betroffen sind
Starten Sie beim Testen Ihrer App die Dienste im Vordergrund. Wenn ein gestarteter Dienst eingeschränkten Zugriff auf Standort, Mikrofon und Kamera hat, wird in Logcat die folgende Meldung angezeigt:
Foreground service started from background can not have \ location/camera/microphone access: service SERVICE_NAME