To help developers be more intentional with defining user-facing foreground
services, Android 10 introduced the android:foregroundServiceType
attribute within the <service> element.
If your app targets Android 14, it must specify appropriate foreground service types. As in previous versions of Android, multiple types can be combined. This list shows the foreground service types to choose from:
cameraconnectedDevicedataSynchealthlocationmediaPlaybackmediaProjectionmicrophonephoneCallremoteMessagingshortServicespecialUsesystemExempted
If a use case in your app isn't associated with any of these types, we strongly recommend that you migrate your logic to use WorkManager or user-initiated data transfer jobs.
The health, remoteMessaging, shortService, specialUse, and systemExempted
types are new in Android 14.
The following code snippet provides an example of a foreground service type declaration in the manifest:
<manifest ...>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<application ...>
<service
android:name=".MyMediaPlaybackService"
android:foregroundServiceType="mediaPlayback"
android:exported="false">
</service>
</application>
</manifest>
If an app that targets Android 14 doesn't define types for a given service in
the manifest, then the system will raise MissingForegroundServiceTypeException
upon calling startForeground() for that service.
Neue Berechtigung für die Verwendung von Diensten im Vordergrund erklären
Wenn Apps, die auf Android 14 ausgerichtet sind, einen Dienst im Vordergrund verwenden, müssen sie eine bestimmte Berechtigung deklarieren, die sich auf den Diensttyp im Vordergrund bezieht, der in Android 14 eingeführt wurde. Diese Berechtigungen werden auf dieser Seite im Abschnitt Vorgesehene Anwendungsfälle und Erzwingung für jeden Typ von Dienst im Vordergrund in den Abschnitten mit der Überschrift „Berechtigung, die Sie in Ihrer Manifestdatei deklarieren müssen“ aufgeführt.
Alle Berechtigungen sind als normale Berechtigungen definiert und werden standardmäßig gewährt. Nutzer können diese Berechtigungen nicht widerrufen.
Typ des Diensts im Vordergrund zur Laufzeit angeben
Für Anwendungen, die Dienste im Vordergrund starten, empfiehlt es sich, die ServiceCompat-Version von startForeground() zu verwenden (verfügbar in androidx-core 1.12 und höher). Dabei geben Sie eine binäre Ganzzahl mit den Typen der Dienste im Vordergrund an. Sie können einen oder mehrere Typwerte übergeben.
Normalerweise sollten Sie nur die Typen deklarieren, die für einen bestimmten Anwendungsfall erforderlich sind. So lassen sich die Anforderungen des Systems für jeden Diensttyp im Vordergrund leichter erfüllen. Wenn ein Dienst im Vordergrund mit mehreren Typen gestartet wird, muss er die Anforderungen der Plattformdurchsetzung für alle Typen einhalten.
ServiceCompat.startForeground(0, notification, FOREGROUND_SERVICE_TYPE_LOCATION)
Wenn der Typ des Dienstes im Vordergrund im Aufruf nicht angegeben ist, wird der Standardtyp verwendet, der im Manifest definiert ist. Wenn Sie den Diensttyp nicht im Manifest angegeben haben, wirft das System MissingForegroundServiceTypeException aus.
Wenn der Dienst im Vordergrund nach dem Starten neue Berechtigungen benötigt, sollten Sie startForeground() noch einmal aufrufen und die neuen Diensttypen hinzufügen. Angenommen, eine Fitness-App führt einen Lauf-Tracker-Dienst aus, für den immer location-Informationen erforderlich sind, aber möglicherweise keine oder media-Berechtigungen. Du musst sowohl location als auch mediaPlayback im Manifest deklarieren. Wenn ein Nutzer einen Lauf startet und nur seinen Standort erfassen lassen möchte, sollte Ihre App startForeground() aufrufen und nur den Diensttyp location übergeben. Wenn der Nutzer die Audiowiedergabe starten möchte, ruf startForeground() noch einmal auf und übergebe location|mediaPlayback.
Systemlaufzeitprüfungen
The system checks for proper use of foreground service types and confirms that
the app has requested the proper runtime permissions or uses the required APIs.
For instance, the system expects apps that use the foreground service type
FOREGROUND_SERVICE_TYPE_LOCATION type to request either
ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION.
This implies that apps must follow a very specific
order of operations when requesting permissions from the user and starting
foreground services. Permissions must be requested and granted before the
app attempts to call startForeground(). Apps that request the appropriate
permissions after the foreground service has been started must change this order
of operations and request the permission before starting the foreground service.
The specifics of platform enforcement appear in the sections labeled "runtime requirements" in the intended use cases and enforcement for each foreground service type section on this page.
Vorgesehene Anwendungsfälle und Erzwingung für jeden Typ von Diensten im Vordergrund
Wenn Sie einen bestimmten Diensttyp im Vordergrund verwenden möchten, müssen Sie in Ihrer Manifestdatei eine bestimmte Berechtigung deklarieren, bestimmte Laufzeitanforderungen erfüllen und Ihre App muss einen der beabsichtigten Anwendungsfälle für diesen Typ erfüllen. In den folgenden Abschnitten werden die Berechtigung, die Sie deklarieren müssen, die Laufzeitvoraussetzungen und die beabsichtigten Anwendungsfälle für jeden Typ erläutert.
Kamera
- Typ des Diensts im Vordergrund, der im Manifest unter
android:foregroundServiceTypedeklariert werden soll camera- Berechtigung, die in Ihrem Manifest deklariert werden muss
FOREGROUND_SERVICE_CAMERA- Konstante, die an
startForeground()übergeben werden soll FOREGROUND_SERVICE_TYPE_CAMERA- Laufzeitvoraussetzungen
Laufzeitberechtigung
CAMERAanfordern und erhaltenHinweis:Die Laufzeitberechtigung
CAMERAunterliegt Einschränkungen bei der Nutzung. Aus diesem Grund können Siecamera-Dienste im Vordergrund nur erstellen, wenn sich Ihre App im Hintergrund befindet, mit wenigen Ausnahmen. Weitere Informationen finden Sie unter Einschränkungen beim Starten von Diensten im Vordergrund, für die Berechtigungen für die Nutzung erforderlich sind.- 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:foregroundServiceTypeconnectedDevice- 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
- Foreground service type to declare in manifest under
android:foregroundServiceTypedataSync- Permission to declare in your manifest
FOREGROUND_SERVICE_DATA_SYNC- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_DATA_SYNC- Runtime prerequisites
- None
- Description
Data transfer operations, such as the following:
- Data upload or download
- Backup-and-restore operations
- Import or export operations
- Fetch data
- Local file processing
- Transfer data between a device and the cloud over a network
- Alternatives
See Alternatives to data sync foreground services for detailed information.
Zustand
- Foreground service type to declare in manifest under
android:foregroundServiceTypehealth- Permission to declare in your manifest
FOREGROUND_SERVICE_HEALTH- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_HEALTH- Runtime prerequisites
At least one of the following conditions must be true:
Declare the
HIGH_SAMPLING_RATE_SENSORSpermission in your manifest.Request and be granted at least one of the following runtime permissions:
BODY_SENSORSon API level 35 and lowerREAD_HEART_RATEREAD_SKIN_TEMPERATUREREAD_OXYGEN_SATURATIONACTIVITY_RECOGNITION
Note: The
BODY_SENSORSand sensor-based READ runtime permissions are subject to while-in-use restrictions. For this reason, you cannot create ahealthforeground service that uses body sensors while your app is in the background unless you've been granted theBODY_SENSORS_BACKGROUND(API level 33 to 35) orREAD_HEALTH_DATA_IN_BACKGROUND(API level 36 and higher) permissions. For more information, see Restrictions on starting foreground services that need while-in-use permissions.- Description
Any long-running use cases to support apps in the fitness category such as exercise trackers.
Standort
- Foreground service type to declare in manifest under
android:foregroundServiceTypelocation- Permission to declare in your manifest
FOREGROUND_SERVICE_LOCATION- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_LOCATION- Runtime prerequisites
The user must have enabled location services and the app must be granted at least one of the following runtime permissions:
Note: In order to check that the user has enabled location services as well as granted access to the runtime permissions, use
PermissionChecker#checkSelfPermission()Note: The location runtime permissions are subject to while-in-use restrictions. For this reason, you cannot create a
locationforeground service while your app is in the background, unless you've been granted theACCESS_BACKGROUND_LOCATIONruntime permission. For more information, see Restrictions on starting foreground services that need while-in-use permissions.- Description
Long-running use cases that require location access, such as navigation and location sharing.
- Alternatives
If your app needs to be triggered when the user reaches specific locations, consider using the geofence API instead.
Medien
- Typ des Dienstes im Vordergrund, der im Manifest unter
android:foregroundServiceTypemediaPlayback- Berechtigung, die in Ihrem Manifest deklariert werden muss
FOREGROUND_SERVICE_MEDIA_PLAYBACK- Konstante, die an
startForeground()übergeben werden soll FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- Laufzeitvoraussetzungen
- Keine
- Beschreibung
- Audio- oder Videowiedergabe im Hintergrund fortsetzen. Unterstützung der Funktion „Digitaler Videorekorder“ (DVR) auf Android TV.
- Alternativen
- Wenn Sie ein Bild-im-Bild-Video anzeigen, verwenden Sie den Bild-im-Bild-Modus.
Medienprojektion
- Typ des Dienstes im Vordergrund, der im Manifest unter
android:foregroundServiceTypemediaProjection- Berechtigung, die in Ihrem 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. Daraufhin wird dem Nutzer eine Berechtigungsbenachrichtigung angezeigt. Der Nutzer muss die Berechtigung erteilen, bevor Sie den Dienst erstellen können.Nachdem Sie den Dienst im Vordergrund erstellt haben, können Sie
MediaProjectionManager.getMediaProjection()aufrufen.- Beschreibung
Übertragung von Inhalten mit
MediaProjectionAPIs auf nicht primäre Displays oder externe Geräte. 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 Dienstes im Vordergrund, der im Manifest unter
android:foregroundServiceTypemicrophone- Berechtigung, die in Ihrem Manifest deklariert werden muss
FOREGROUND_SERVICE_MICROPHONE- Konstante, die an
startForeground()übergeben werden soll FOREGROUND_SERVICE_TYPE_MICROPHONE- Laufzeitvoraussetzungen
Fordern Sie die Laufzeitberechtigung
RECORD_AUDIOan und erhalten Sie sie.Hinweis:Die Laufzeitberechtigung
RECORD_AUDIOunterliegt Einschränkungen bei der Nutzung. Aus diesem Grund können Sie mit wenigen Ausnahmen keinenmicrophone-Dienst im Vordergrund erstellen, während sich Ihre App im Hintergrund befindet. Weitere Informationen finden Sie unter Einschränkungen beim Starten von Diensten im Vordergrund, für die Berechtigungen für die Nutzung erforderlich sind.- Beschreibung
Mikrofonaufzeichnung im Hintergrund fortsetzen, z. B. bei Sprachrekordern oder Kommunikations-Apps
Telefonanruf
- Foreground service type to declare in manifest under
android:foregroundServiceTypephoneCall- Permission to declare in your manifest
FOREGROUND_SERVICE_PHONE_CALL- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_PHONE_CALL- Runtime prerequisites
At least one of these conditions must be true:
- App has declared the
MANAGE_OWN_CALLSpermission in its manifest file.
- App has declared the
- App is the default dialer app through the
ROLE_DIALERrole.
- App is the default dialer app through the
- Description
Continue an ongoing call using the
ConnectionServiceAPIs.- Alternatives
If you need to make phone, video, or VoIP calls, consider using the
android.telecomlibrary.Consider using
CallScreeningServiceto screen calls.
Remote-Messaging
- Typ des Dienstes im Vordergrund, der im Manifest unter
android:foregroundServiceTyperemoteMessaging- 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.
Kurze Verbindung
- Typ des Dienstes im Vordergrund, der im Manifest unter
android:foregroundServiceTypeshortService- 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
shortServicekann 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_SERVICEerwä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
shortServicenicht 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_SERVICEum 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
shortServiceund einen anderen Typ von Dienst im Vordergrund enthält, wird die Deklaration des TypsshortServicevom 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
- Foreground service type to declare in manifest under
android:foregroundServiceTypespecialUse- Permission to declare in your manifest
FOREGROUND_SERVICE_SPECIAL_USE- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_SPECIAL_USE- Runtime prerequisites
- None
- Description
Covers any valid foreground service use cases that aren't covered by the other foreground service types.
In addition to declaring the
FOREGROUND_SERVICE_TYPE_SPECIAL_USEforeground service type, developers should declare use cases in the manifest. To do so, they specify the<property>element within the<service>element. These values and corresponding use cases are reviewed when you submit your app in the Google Play Console. The use cases you provide are free-form, and you should make sure to provide enough information to let the reviewer see why you need to use thespecialUsetype.<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 unter
android:foregroundServiceTypesystemExempted- Berechtigung, die in Ihrem Manifest deklariert werden muss
FOREGROUND_SERVICE_SYSTEM_EXEMPTED- Konstante, die an
startForeground()übergeben werden soll FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED- Laufzeitvoraussetzungen
- Keine
- Beschreibung
Reserviert für Systemanwendungen und bestimmte Systemintegrationen, um Dienste im Vordergrund weiterhin zu verwenden.
Damit dieser Typ verwendet werden kann, muss eine App mindestens eines der folgenden Kriterien erfüllen:
- Das Gerät befindet sich im Demomodus
- Die App ist ein Geräteeigentümer
- Die App ist ein Inhaber des Profilers
- Sicherheits-Apps mit der Rolle
ROLE_EMERGENCY - Apps zur Geräteverwaltung
- Apps, die die Berechtigung
SCHEDULE_EXACT_ALARModerUSE_EXACT_ALARMhaben und Dienste im Vordergrund verwenden, um Wecker im Hintergrund fortzusetzen, einschließlich Weckern, die nur haptisches Feedback geben. VPN-Apps (konfiguriert über Einstellungen > Netzwerk und Internet > VPN)
Andernfalls löst die Deklaration dieses Typs eine
ForegroundServiceTypeNotAllowedExceptionaus.
Google Play-Richtlinienerzwingung 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.