Arten von Diensten im Vordergrund sind erforderlich

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:

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

The best practice for applications starting foreground services is to use the ServiceCompat version of startForeground() (available in androidx-core 1.12 and higher) where you pass in a bitwise integer of foreground service types. You can choose to pass one or more type values.

Usually, you should declare only the types required for a particular use case. This makes it easier to meet the system's expectations for each foreground service type. In cases where a foreground service is started with multiple types, then the foreground service must adhere to the platform enforcement requirements of all types.

ServiceCompat.startForeground(0, notification, FOREGROUND_SERVICE_TYPE_LOCATION)

If the foreground service type is not specified in the call, the type defaults to the values defined in the manifest. If you didn't specify the service type in the manifest, the system throws MissingForegroundServiceTypeException.

If the foreground service needs new permissions after you launch it, you should call startForeground() again and add the new service types. For example, suppose a fitness app runs a running-tracker service that always needs location information, but might or might not need media permissions. You would need to declare both location and mediaPlayback in the manifest. If a user starts a run and just wants their location tracked, your app should call startForeground() and pass just the location service type. Then, if the user wants to start playing audio, call startForeground() again and pass 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

Foreground service type to declare in manifest under android:foregroundServiceType
camera
Permission to declare in your manifest
FOREGROUND_SERVICE_CAMERA
Constant to pass to startForeground()
FOREGROUND_SERVICE_TYPE_CAMERA
Runtime prerequisites

Request and be granted the CAMERA runtime permission

Note: The CAMERA runtime permission is subject to while-in-use restrictions. For this reason, you cannot create a camera foreground service while your app is in the background, with a few exceptions. For more information, see Restrictions on starting foreground services that need while-in-use permissions.

Description

Continue to access the camera from the background, such as video chat apps that allow for multitasking.

Verbundenes Gerät

Foreground service type to declare in manifest under
android:foregroundServiceType
connectedDevice
Permission to declare in your manifest
FOREGROUND_SERVICE_CONNECTED_DEVICE
Constant to pass to startForeground()
FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
Runtime prerequisites

At least one of the following conditions must be true:

Description

Interactions with external devices that require a Bluetooth, NFC, IR, USB, or network connection.

Alternatives

If your app needs to do continuous data transfer to an external device, consider using the companion device manager instead. Use the companion device presence API to help your app stay running while the companion device is in range.

If your app needs to scan for bluetooth devices, consider using the Bluetooth scan API instead.

Datensynchronisierung

Typ des Dienstes im Vordergrund, der im Manifest unter
android:foregroundServiceType
dataSync
Berechtigung, die in Ihrem Manifest deklariert werden muss
FOREGROUND_SERVICE_DATA_SYNC
Konstante, die an startForeground() übergeben werden soll
FOREGROUND_SERVICE_TYPE_DATA_SYNC
Laufzeitvoraussetzungen
Keine
Beschreibung

Datenübertragungsvorgänge, z. B.:

  • Datenupload oder -download
  • 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 Diensten im Vordergrund für die Datensynchronisierung.

Zustand

Foreground service type to declare in manifest under
android:foregroundServiceType
health
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:

Note: The BODY_SENSORS and sensor-based READ runtime permissions are subject to while-in-use restrictions. For this reason, you cannot create a health foreground service that uses body sensors while your app is in the background unless you've been granted the BODY_SENSORS_BACKGROUND (API level 33 to 35) or READ_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

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:

Hinweis:Mit PermissionChecker#checkSelfPermission() können Sie prüfen, ob der Nutzer die Standortdienste aktiviert und Zugriff auf die Laufzeitberechtigungen gewährt hat.

Hinweis:Die Laufzeitberechtigungen für die Standortermittlung unterliegen Einschränkungen bei der Verwendung. Aus diesem Grund können Sie keinen location-Dienst im Vordergrund erstellen, während sich Ihre App im Hintergrund befindet, es sei denn, Sie haben die Laufzeitberechtigung ACCESS_BACKGROUND_LOCATION erhalten. Weitere Informationen finden Sie unter Einschränkungen beim Starten von Diensten im Vordergrund, für die Berechtigungen für die Nutzung erforderlich sind.

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 Dienstes im Vordergrund, der im Manifest unter
android:foregroundServiceType
mediaPlayback
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:foregroundServiceType
mediaProjection
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 MediaProjection APIs 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

Foreground service type to declare in manifest under
android:foregroundServiceType
microphone
Permission to declare in your manifest
FOREGROUND_SERVICE_MICROPHONE
Constant to pass to startForeground()
FOREGROUND_SERVICE_TYPE_MICROPHONE
Runtime prerequisites

Request and be granted the RECORD_AUDIO runtime permission.

Note: The RECORD_AUDIO runtime permission is subject to while-in-use restrictions. For this reason, you cannot create a microphone foreground service while your app is in the background, with a few exceptions. For more information, see Restrictions on starting foreground services that need while-in-use permissions.

Description

Continue microphone capture from the background, such as voice recorders or communication apps.

Telefonanruf

Typ des Dienstes im Vordergrund, der im Manifest unter
android:foregroundServiceType
phoneCall
Berechtigung, die in Ihrem Manifest deklariert werden muss
FOREGROUND_SERVICE_PHONE_CALL
Konstante, die an startForeground() übergeben werden soll
FOREGROUND_SERVICE_TYPE_PHONE_CALL
Laufzeitvoraussetzungen

Mindestens eine der folgenden Bedingungen muss erfüllt sein:

  • Die App hat die Berechtigung MANAGE_OWN_CALLS in ihrer Manifestdatei deklariert.
  • Die App ist die Standard-App fürs Telefonieren über die Rolle ROLE_DIALER.
Beschreibung

Fortsetzen eines laufenden Anrufs mithilfe der ConnectionService APIs

Alternativen

Wenn Sie Telefon-, Video- oder VoIP-Anrufe starten möchten, können Sie die android.telecom-Bibliothek verwenden.

Sie können CallScreeningService 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.

Kurze Verbindung

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 sollte Service.stopSelf() oder Service.stopForeground() aufrufen, bevor die Zeitüberschreitung eintritt. Andernfalls wird der neue Service.onTimeout() aufgerufen, wodurch Apps kurzzeitig die Möglichkeit haben, stopSelf() oder stopForeground() 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 wird FOREGROUND_SERVICE_TYPE_SHORT_SERVICE erwähnt. Aus diesen Gründen wird empfohlen, den Service.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 der Service.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 Parameter FOREGROUND_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 einer ForegroundServiceStartNotAllowedException.

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 Typs shortService 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

Foreground service type to declare in manifest under
android:foregroundServiceType
specialUse
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_USE foreground 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 the specialUse type.

<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

Foreground service type to declare in manifest under
android:foregroundServiceType
systemExempted
Permission to declare in your manifest
FOREGROUND_SERVICE_SYSTEM_EXEMPTED
Constant to pass to startForeground()
FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED
Runtime prerequisites
None
Description

Reserved for system applications and specific system integrations, to continue to use foreground services.

To use this type, an app must meet at least one of the following criteria:

  • Device is in demo mode state
  • App is a Device Owner
  • App is a Profiler Owner
  • Safety Apps that have the ROLE_EMERGENCY role
  • Device Admin apps
  • Apps holding SCHEDULE_EXACT_ALARM or USE_EXACT_ALARM permission and are using Foreground Service to continue alarms in the background, including haptics-only alarms.
  • VPN apps (configured using Settings > Network & Internet > VPN)

    Otherwise, declaring this type causes the system to throw a ForegroundServiceTypeNotAllowedException.

Google Play-Richtlinienerzwingung für die Verwendung von Typen von Diensten im Vordergrund

If your app targets Android 14 or higher, you'll need to declare your app's foreground service types in the Play Console's app content page (Policy > App content). For more information on how to declare your foreground service types in Play Console, see Understanding foreground service and full-screen intent requirements.