Ab Android 14 (API-Level 34) müssen Sie für jeden Dienst im Vordergrund einen geeigneten Diensttyp deklarieren. Das bedeutet, dass Sie den
Diensttyp im App-Manifest deklarieren und zusätzlich zur Berechtigung
FOREGROUND_SERVICE
die entsprechende Berechtigung für Dienste im Vordergrund für diesen Typ anfordern müssen. Außerdem müssen Sie je nach Diensttyp im Vordergrund möglicherweise Laufzeitberechtigungen anfordern, bevor Sie den Dienst starten.
Kamera
- Typ des Diensts im Vordergrund, der im Manifest unter
android:foregroundServiceTypedeklariert 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
CAMERA-Laufzeitberechtigung 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: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.
Daten synchronisieren
- Typ des Dienstes im Vordergrund, der im Manifest unter deklariert werden muss
android:foregroundServiceTypedataSync- Berechtigung, in Ihrem Manifest zu deklarieren
FOREGROUND_SERVICE_DATA_SYNC- Konstante, die an
startForeground()übergeben werden muss FOREGROUND_SERVICE_TYPE_DATA_SYNC- Laufzeitvoraussetzungen
- –
- Beschreibung
Datenübertragungsvorgänge wie die folgenden:
- Daten hochladen 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 Diensten im Vordergrund für die Datensynchronisierung.
Gesundheit
- Typ des Diensts im Vordergrund, der im Manifest unter
android:foregroundServiceTypehealth- 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_SENSORSin Ihrem Manifest.Sie müssen mindestens eine der folgenden Laufzeitberechtigungen anfordern und erhalten:
BODY_SENSORSbei API 35 und niedrigerREAD_HEART_RATEREAD_SKIN_TEMPERATUREREAD_OXYGEN_SATURATIONACTIVITY_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:foregroundServiceTypelocation- 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 deklariert werden muss
android:foregroundServiceTypemediaPlayback- 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:foregroundServiceTypemediaProcessing- 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.
Projektion von Medieninhalten
- Typ des Dienstes im Vordergrund, der im Manifest unter deklariert werden muss
android:foregroundServiceTypemediaProjection- Berechtigung, die im Manifest deklariert werden muss
FOREGROUND_SERVICE_MEDIA_PROJECTION- Konstante, die an
startForeground()übergeben werden muss FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- Laufzeitvoraussetzungen
Rufen Sie die
createScreenCaptureIntent()Methode auf, bevor Sie den Dienst im Vordergrund starten. Dadurch wird dem Nutzer eine Berechtigungsbenachrichtigung angezeigt. Er 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
Übertragen Sie Inhalte mit den
MediaProjection-APIs auf ein nicht primäres Display oder ein externes Gerät. 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 deklariert werden muss
android:foregroundServiceTypemicrophone- 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_AUDIOan und erhalten Sie sie.- Beschreibung
Mikrofonaufnahmen im Hintergrund fortsetzen, z. B. über Sprachrekorder oder Kommunikations-Apps.
Telefonanruf
- Typ des Dienstes im Vordergrund, der im Manifest unter deklariert werden muss
android:foregroundServiceTypephoneCall- Berechtigung, die im Manifest deklariert werden muss
FOREGROUND_SERVICE_PHONE_CALL- Konstante, die an
startForeground()übergeben werden muss FOREGROUND_SERVICE_TYPE_PHONE_CALL- Laufzeitvoraussetzungen
Mindestens eine der folgenden Bedingungen muss erfüllt sein:
- Die App hat die
MANAGE_OWN_CALLSBerechtigung in ihrer Manifest Datei deklariert.
- Die App hat die
- Die App ist über die
ROLE_DIALERRolle die Standard-App fürs Telefonieren.
- Die App ist über die
- Beschreibung
Einen laufenden Anruf mit den
ConnectionService-APIs fortsetzen.- Alternativen
Wenn Sie Telefon-, Video- oder VoIP-Anrufe tätigen müssen, können Sie die
android.telecom-Bibliothek verwenden.Sie können
CallScreeningServiceverwenden, um Anrufe zu filtern.
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.
Kurzer Dienst
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceTypeshortService- 在清单中声明的权限
- 无
- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_SHORT_SERVICE- 运行时前提条件
- 无
- 说明
快速完成不可中断或推迟的关键工作。
这种类型有一些独特的特征:
- 只能持续运行一小段时间(大约 3 分钟)。
- 不支持粘性前台服务。
- 无法启动其他前台服务。
- 不需要类型专用权限,不过它仍需要
FOREGROUND_SERVICE权限。 - 只有当应用当前符合启动新前台服务的条件时,
shortService才能更改为其他服务类型。 - 前台服务可以随时将其类型更改为
shortService,届时超时期限将开始。
shortService 的超时时间从调用
Service.startForeground()开始算起。应用应在发生超时之前调用Service.stopSelf()或Service.stopForeground()。否则,系统会调用新的Service.onTimeout(),让应用有机会调用stopSelf()或stopForeground()来停止其服务。调用
Service.onTimeout()后的短时间内,应用会进入缓存状态,并且不再被视为处于前台,除非用户正在主动与应用互动。应用缓存一小段时间后,服务还未停止,该应用会收到 ANR 消息。ANR 消息提及FOREGROUND_SERVICE_TYPE_SHORT_SERVICE。出于这些原因,实现Service.onTimeout()回调被视为一种最佳实践。Android 13 及更低版本中不存在
Service.onTimeout()回调。如果同一服务在此类设备上运行,则不会出现超时,也不会发生 ANR。确保您的服务在完成处理任务后立即停止,即使它尚未收到Service.onTimeout()回调也是如此。请务必注意,如果未遵循
shortService的超时设置,即使应用还有其他有效的前台服务或其他应用生命周期进程,应用也会遇到 ANR。如果应用对用户可见,或满足允许从后台启动前台服务的某一豁免条件,则使用
FOREGROUND_SERVICE_TYPE_SHORT_SERVICE参数再次调用Service.StartForeground()会将超时时间再延长 3 分钟。如果应用对用户不可见且不满足其中一个豁免条件,则尝试启动其他前台服务(无论其类型如何)都会导致ForegroundServiceStartNotAllowedException。即使用户为您的应用停用电池优化功能,仍然会受到 shortService FGS 的影响。
如果您启动包含
shortService类型和另一个前台服务类型的前台服务,系统会忽略shortService类型声明。不过,该服务仍必须遵守其他声明类型的先决条件。如需了解详情,请参阅前台服务文档。
Spezielle Anwendungsfälle
- Typ des Diensts im Vordergrund, der im Manifest unter
android:foregroundServiceTypespecialUse- 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_USETyps 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:foregroundServiceTypesystemExempted- 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_ALARModerUSE_EXACT_ALARM VPN-Apps (konfiguriert über Einstellungen > Netzwerk und Internet > VPN)
Andernfalls gibt das System den Fehler
ForegroundServiceTypeNotAllowedExceptionaus.
Durchsetzung der Google Play-Richtlinien für die Verwendung von Diensttypen 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.