Ab Android 14 (API-Ebene 34) müssen Sie für jeden Dienst im Vordergrund einen geeigneten Diensttyp deklarieren. Das bedeutet, dass Sie den Diensttyp in Ihrem App-Manifest deklarieren und die entsprechende Berechtigung für Dienste im Vordergrund für diesen Typ anfordern müssen (zusätzlich zur Anforderung der Berechtigung FOREGROUND_SERVICE
). Außerdem müssen Sie je nach Diensttyp möglicherweise Laufzeitberechtigungen anfordern, bevor Sie den Dienst starten.
Kamera
- Typ des Diensts im Vordergrund, der im Manifest unter
android:foregroundServiceType
deklariert werden muss camera
- Berechtigung, die im Manifest deklariert werden muss
FOREGROUND_SERVICE_CAMERA
- Konstante, die an
startForeground()
übergeben werden soll FOREGROUND_SERVICE_TYPE_CAMERA
- Laufzeitvoraussetzungen
Die Laufzeitberechtigung
CAMERA
anfordern und erhalten- Beschreibung
Zugriff auf die Kamera im Hintergrund ist weiterhin möglich, z. B. über Videoanruf-Apps, die Multitasking zulassen.
Verbundenes Gerät
- Typ des Dienstes im Vordergrund, der im Manifest unter
android:foregroundServiceType
connectedDevice
- Berechtigung, die in Ihrem Manifest deklariert werden muss
FOREGROUND_SERVICE_CONNECTED_DEVICE
- Konstante, die an
startForeground()
übergeben werden soll FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
- Laufzeitvoraussetzungen
Mindestens eine der folgenden Bedingungen muss erfüllt sein:
Deklarieren Sie mindestens eine der folgenden Berechtigungen in Ihrem Manifest:
Sie müssen mindestens eine der folgenden Laufzeitberechtigungen anfordern und erhalten:
UsbManager.requestPermission()
anrufen
- Beschreibung
Interaktionen mit externen Geräten, die eine Bluetooth‑, NFC‑, IR‑, USB‑ oder Netzwerkverbindung erfordern.
- Alternativen
Wenn Ihre App eine kontinuierliche Datenübertragung an ein externes Gerät ausführen muss, sollten Sie stattdessen den Companion Device Manager verwenden. Mit der API zur Anwesenheit von Companion-Geräten können Sie dafür sorgen, dass Ihre App weiter ausgeführt wird, solange sich das Companion-Gerät in Reichweite befindet.
Wenn Ihre App nach Bluetooth-Geräten suchen muss, können Sie stattdessen die Bluetooth Scan API verwenden.
Datensynchronisierung
- Typ des Diensts im Vordergrund, der im Manifest unter
android:foregroundServiceType
dataSync
- Berechtigung, die im Manifest deklariert werden muss
FOREGROUND_SERVICE_DATA_SYNC
- Konstante, die an
startForeground()
übergeben werden soll FOREGROUND_SERVICE_TYPE_DATA_SYNC
- Laufzeitvoraussetzungen
- Keine
- Beschreibung
Vorgänge zur Datenübertragung, z. B.:
- Daten hoch- oder herunterladen
- Sicherungs- und Wiederherstellungsvorgänge
- Import- oder Exportvorgänge
- Daten abrufen
- Lokale Dateiverarbeitung
- Daten über ein Netzwerk zwischen einem Gerät und der Cloud übertragen
- Alternativen
Ausführliche Informationen finden Sie unter Alternativen zu Vordergrunddiensten für die Datensynchronisierung.
Zustand
- Typ des Diensts im Vordergrund, der im Manifest unter
android:foregroundServiceType
health
- Berechtigung, die in Ihrem Manifest deklariert werden muss
FOREGROUND_SERVICE_HEALTH
- Konstante, die an
startForeground()
übergeben werden soll FOREGROUND_SERVICE_TYPE_HEALTH
- Laufzeitvoraussetzungen
Mindestens eine der folgenden Bedingungen muss erfüllt sein:
Deklarieren Sie die Berechtigung
HIGH_SAMPLING_RATE_SENSORS
in Ihrem Manifest.Sie müssen mindestens eine der folgenden Laufzeitberechtigungen anfordern und erhalten:
BODY_SENSORS
bei API 35 und niedrigerREAD_HEART_RATE
READ_SKIN_TEMPERATURE
READ_OXYGEN_SATURATION
ACTIVITY_RECOGNITION
- Beschreibung
Alle lang laufenden Anwendungsfälle zur Unterstützung von Apps in der Kategorie „Fitness“, z. B. Trainings-Tracker.
Standort
- Typ des Dienstes im Vordergrund, der im Manifest unter
android:foregroundServiceType
location
- Berechtigung, die in Ihrem Manifest deklariert werden muss
FOREGROUND_SERVICE_LOCATION
- Konstante, die an
startForeground()
übergeben werden soll FOREGROUND_SERVICE_TYPE_LOCATION
- Laufzeitvoraussetzungen
Der Nutzer muss die Standortdienste aktiviert haben und der App muss mindestens eine der folgenden Laufzeitberechtigungen gewährt werden:
.- Beschreibung
Langlaufende Anwendungsfälle, für die der Standortzugriff erforderlich ist, z. B. Navigation und Standortfreigabe.
- Alternativen
Wenn Ihre App ausgelöst werden soll, wenn der Nutzer bestimmte Orte erreicht, sollten Sie stattdessen die Geofence API verwenden.
Medien
- Typ des Diensts im Vordergrund, der im Manifest unter
android:foregroundServiceType
mediaPlayback
- Berechtigung, die im Manifest deklariert werden muss
FOREGROUND_SERVICE_MEDIA_PLAYBACK
- Konstante, die an
startForeground()
übergeben werden soll FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
- Laufzeitvoraussetzungen
- Keine
- Beschreibung
Fortsetzung der Audio‑ oder Videowiedergabe im Hintergrund. Unterstützung der DVR-Funktion (Digital Video Recording) auf Android TV.
- Alternativen
Wenn Sie ein Bild-im-Bild-Video präsentieren, verwenden Sie den Bild-im-Bild-Modus.
Medien werden verarbeitet.
- Typ des Dienstes im Vordergrund, der im Manifest unter
android:foregroundServiceType
mediaProcessing
- Berechtigung, die in Ihrem Manifest deklariert werden muss
FOREGROUND_SERVICE_MEDIA_PROCESSING
- Konstante, die an
startForeground()
übergeben werden soll FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING
- Laufzeitvoraussetzungen
- Keine
- Beschreibung
Dienst zum Ausführen zeitaufwendiger Vorgänge auf Medien-Assets, z. B. zum Konvertieren von Medien in verschiedene Formate. Das System erlaubt diesem Dienst eine begrenzte Laufzeit. Unter normalen Umständen beträgt diese Zeitbeschränkung 6 Stunden pro 24 Stunden. Dieses Limit gilt für alle
mediaProcessing
-Dienste im Vordergrund einer App.Ihre App sollte den Medienverarbeitungsdienst in folgenden Fällen manuell beenden:
- Wenn der Transcodierungsvorgang abgeschlossen ist oder einen Fehlerstatus erreicht, muss der Dienst
Service.stopForeground()
undService.stopSelf()
aufrufen, um den Dienst vollständig zu beenden.
- Wenn der Transcodierungsvorgang abgeschlossen ist oder einen Fehlerstatus erreicht, muss der Dienst
Wenn die Zeitüberschreitung erreicht ist, ruft das System die Methode
Service.onTimeout(int, int)
des Dienstes auf. In dieser Zeit hat der Dienst einige Sekunden Zeit,Service.stopSelf()
aufzurufen. Wenn der DienstService.stopSelf()
nicht aufruft, wird eine ANR mit der folgenden Fehlermeldung ausgegeben: „Ein Dienst im Vordergrund von <fgs_type> wurde nicht innerhalb des Zeitlimits beendet: <component_name>“.Hinweis:
Service.onTimeout(int, int)
ist unter Android 14 oder niedriger nicht verfügbar. Wenn auf Geräten mit diesen Versionen ein Medienverarbeitungsdienst die Zeitüberschreitung erreicht, wird die App sofort vom System im Cache gespeichert. Aus diesem Grund sollte Ihre App nicht auf eine Benachrichtigung zur Zeitüberschreitung warten. Stattdessen sollte der Dienst im Vordergrund so bald wie möglich beendet oder in einen Dienst im Hintergrund geändert werden.
Medienprojektion
- Typ des Diensts im Vordergrund, der im Manifest unter
android:foregroundServiceType
mediaProjection
- Berechtigung, die im Manifest deklariert werden muss
FOREGROUND_SERVICE_MEDIA_PROJECTION
- Konstante, die an
startForeground()
übergeben werden soll FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
- Laufzeitvoraussetzungen
Rufen Sie die Methode
createScreenCaptureIntent()
auf, bevor Sie den Dienst im Vordergrund starten. Dadurch wird dem Nutzer eine Berechtigungsbenachrichtigung angezeigt. Der Nutzer muss die Berechtigung erteilen, bevor Sie den Dienst erstellen können.Nachdem Sie den Vordergrunddienst erstellt haben, können Sie
MediaProjectionManager.getMediaProjection()
aufrufen.- Beschreibung
Übertragung von Inhalten auf nicht primäre Displays oder externe Geräte mit den
MediaProjection
APIs. Diese Inhalte müssen nicht ausschließlich Medieninhalte sein.- Alternativen
Wenn Sie Medien auf ein anderes Gerät streamen möchten, verwenden Sie das Google Cast SDK.
Mikrofon
- Typ des Diensts im Vordergrund, der im Manifest unter
android:foregroundServiceType
microphone
- Berechtigung, die im Manifest deklariert werden muss
FOREGROUND_SERVICE_MICROPHONE
- Konstante, die an
startForeground()
übergeben werden soll FOREGROUND_SERVICE_TYPE_MICROPHONE
- Laufzeitvoraussetzungen
Fordern Sie die Laufzeitberechtigung
RECORD_AUDIO
an und erhalten Sie sie.- Beschreibung
Fortsetzung der Mikrofonaufnahme im Hintergrund, z. B. durch Sprachrekorder oder Kommunikations-Apps.
Telefonanruf
- Typ des Diensts im Vordergrund, der im Manifest unter
android:foregroundServiceType
phoneCall
- Berechtigung, die im Manifest deklariert werden muss
FOREGROUND_SERVICE_PHONE_CALL
- Konstante, die an
startForeground()
übergeben werden soll FOREGROUND_SERVICE_TYPE_PHONE_CALL
- Laufzeitvoraussetzungen
Mindestens eine dieser Bedingungen muss erfüllt sein:
- Die App hat die Berechtigung
MANAGE_OWN_CALLS
in ihrer Manifestdatei deklariert.
- Die App hat die Berechtigung
- Die App ist die Standard-App fürs Telefonieren über die Rolle
ROLE_DIALER
.
- Die App ist die Standard-App fürs Telefonieren über die Rolle
- Beschreibung
Laufende Anrufe mit den
ConnectionService
-APIs fortsetzen- Alternativen
Wenn Sie Telefon-, Video- oder VoIP-Anrufe tätigen müssen, sollten Sie die
android.telecom
-Bibliothek verwenden.Erwägen Sie,
CallScreeningService
zu verwenden, um Anrufe zu filtern.
Remote-Messaging
- Typ des Dienstes im Vordergrund, der im Manifest unter
android:foregroundServiceType
remoteMessaging
- Berechtigung, die in Ihrem Manifest deklariert werden muss
FOREGROUND_SERVICE_REMOTE_MESSAGING
- Konstante, die an
startForeground()
übergeben werden soll FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING
- Laufzeitvoraussetzungen
- Keine
- Beschreibung
- Sie können Nachrichten von einem Gerät auf ein anderes übertragen. Unterstützt Nutzer beim Wechseln des Geräts, ohne dass die Messaging-Aufgaben weiter ausgeführt werden.
Kurzer Service
- Typ des Dienstes im Vordergrund, der im Manifest unter
android:foregroundServiceType
shortService
- Berechtigung, die in Ihrem Manifest deklariert werden muss
- Keine
- Konstante, die an
startForeground()
übergeben werden soll FOREGROUND_SERVICE_TYPE_SHORT_SERVICE
- Laufzeitvoraussetzungen
- Keine
- Beschreibung
Sie können wichtige Aufgaben, die nicht unterbrochen oder verschoben werden können, schnell erledigen.
Dieser Typ hat einige einzigartige Eigenschaften:
- Kann nur für einen kurzen Zeitraum (ca. 3 Minuten) ausgeführt werden.
- Keine Unterstützung für persistente Dienste im Vordergrund.
- Andere Dienste im Vordergrund können nicht gestartet werden.
- Erfordert keine typspezifische Berechtigung, aber die Berechtigung
FOREGROUND_SERVICE
. - Ein
shortService
kann nur zu einem anderen Diensttyp wechseln, wenn die App derzeit berechtigt ist, einen neuen Dienst im Vordergrund zu starten. - Ein Dienst im Vordergrund kann seinen Typ jederzeit in
shortService
ändern. Ab diesem Zeitpunkt beginnt die Zeitüberschreitung.
Das Zeitlimit für shortService beginnt, sobald
Service.startForeground()
aufgerufen wird. Die App sollteService.stopSelf()
oderService.stopForeground()
aufrufen, bevor die Zeitüberschreitung eintritt. Andernfalls wird der neueService.onTimeout()
aufgerufen, wodurch Apps kurzzeitig die Möglichkeit haben,stopSelf()
oderstopForeground()
aufzurufen, um ihren Dienst zu beenden.Kurz nach dem Aufruf von
Service.onTimeout()
wechselt die App in den Cache-Status und wird nicht mehr als App im Vordergrund betrachtet, es sei denn, der Nutzer interagiert aktiv mit der App. Kurz nachdem die App im Cache gespeichert wurde und der Dienst nicht beendet wurde, erhält die App eine ANR. In der ANR-Nachricht wirdFOREGROUND_SERVICE_TYPE_SHORT_SERVICE
erwähnt. Aus diesen Gründen wird empfohlen, denService.onTimeout()
-Callback zu implementieren.Der
Service.onTimeout()
-Callback ist unter Android 13 und niedriger nicht vorhanden. Wenn derselbe Dienst auf solchen Geräten ausgeführt wird, erhält er weder ein Zeitlimit noch eine ANR. Der Dienst muss beendet werden, sobald die Verarbeitungsaufgabe abgeschlossen ist, auch wenn derService.onTimeout()
-Callback noch nicht empfangen wurde.Wenn das Zeitlimit der
shortService
nicht eingehalten wird, wird für die App ein ANR ausgegeben, auch wenn andere gültige Dienste im Vordergrund oder andere App-Lebenszyklus-Prozesse ausgeführt werden.Wenn eine App für den Nutzer sichtbar ist oder eine der Ausnahmen erfüllt, die es ermöglichen, Dienste im Vordergrund aus dem Hintergrund zu starten, wird die Zeitüberschreitung durch einen erneuten Aufruf von
Service.StartForeground()
mit dem ParameterFOREGROUND_SERVICE_TYPE_SHORT_SERVICE
um weitere drei Minuten verlängert. Wenn die App für den Nutzer nicht sichtbar ist und keinen der Ausnahmen erfüllt, führt jeder Versuch, einen weiteren Dienst im Vordergrund zu starten, unabhängig vom Typ, zu einerForegroundServiceStartNotAllowedException
.Wenn ein Nutzer die Akku-Optimierung für Ihre App deaktiviert, ist sie weiterhin vom Zeitlimit für shortService-FGS betroffen.
Wenn Sie einen Dienst im Vordergrund starten, der den Typ
shortService
und einen anderen Typ von Dienst im Vordergrund enthält, wird die Deklaration des TypsshortService
vom System ignoriert. Der Dienst muss jedoch weiterhin die Voraussetzungen der anderen angegebenen Typen erfüllen. Weitere Informationen finden Sie in der Dokumentation zu Diensten im Vordergrund.
Spezielle Anwendungsfälle
- Typ des Diensts im Vordergrund, der im Manifest unter
android:foregroundServiceType
specialUse
- Berechtigung, die in Ihrem Manifest deklariert werden muss
FOREGROUND_SERVICE_SPECIAL_USE
- Konstante, die an
startForeground()
übergeben werden soll FOREGROUND_SERVICE_TYPE_SPECIAL_USE
- Laufzeitvoraussetzungen
- Keine
- Beschreibung
Deckt alle gültigen Anwendungsfälle für Dienste im Vordergrund ab, die nicht von den anderen Typen abgedeckt werden.
Neben der Deklarierung des
FOREGROUND_SERVICE_TYPE_SPECIAL_USE
Typs von Diensten im Vordergrund sollten Entwickler Anwendungsfälle im Manifest deklarieren. Dazu geben sie das<property>
-Element innerhalb des Elements<service>
an. Diese Werte und die entsprechenden Anwendungsfälle werden geprüft, wenn Sie Ihre App in der Google Play Console einreichen. Die von Ihnen angegebenen Anwendungsfälle sind kostenlos formuliert. Sie sollten jedoch genügend Informationen angeben, damit die Prüfer nachvollziehen können, warum Sie denspecialUse
-Typ verwenden müssen.<service android:name="fooService" android:foregroundServiceType="specialUse"> <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="explanation_for_special_use"/> </service>
Vom System ausgenommen
- Typ des Dienstes im Vordergrund, der im Manifest deklariert werden soll unter
android:foregroundServiceType
systemExempted
- Deklarierungsberechtigung im Manifest
FOREGROUND_SERVICE_SYSTEM_EXEMPTED
- Konstante zur Übergabe an
startForeground()
FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED
- Laufzeitvoraussetzungen
- Keine
- Beschreibung
Ist für Systemanwendungen und bestimmte Systemintegrationen vorgesehen, um weiterhin Dienste im Vordergrund zu verwenden.
Zur Verwendung dieses Typs muss eine App mindestens eines der folgenden Kriterien erfüllen:
- Gerät befindet sich im Demomodus
- Die App ist ein Geräteinhaber
- App ist ein Profiler-Inhaber
- Sicherheits-Apps mit der Rolle
ROLE_EMERGENCY
- Apps zur Geräteverwaltung
- Apps mit der Berechtigung
SCHEDULE_EXACT_ALARM
oderUSE_EXACT_ALARM
VPN-Apps (konfiguriert über Einstellungen > Netzwerk und Internet > VPN)
Andernfalls gibt das System den Fehler
ForegroundServiceTypeNotAllowedException
aus.
Durchsetzung der Google Play-Richtlinien für die Verwendung von Typen von Diensten im Vordergrund
Wenn Ihre App auf Android 14 oder höher ausgerichtet ist, müssen Sie die Typen der Dienste im Vordergrund Ihrer App auf der Seite „App-Inhalte“ in der Play Console (Richtlinie > App-Inhalte) deklarieren. Weitere Informationen dazu, wie Sie die Typen Ihrer Dienste im Vordergrund in der Play Console deklarieren, finden Sie unter Anforderungen für Dienste im Vordergrund und Full-Screen Intents.