Types de services de premier plan

À partir d'Android 14 (niveau d'API 34), vous devez déclarer un type de service approprié pour chaque service de premier plan. Cela signifie que vous devez déclarer le type de service dans le fichier manifeste de votre application et demander l'autorisation de service de premier plan appropriée pour ce type (en plus de demander l'autorisation FOREGROUND_SERVICE). De plus, selon le type de service de premier plan, vous devrez peut-être demander des autorisations d'exécution avant de lancer le service.

Appareil photo

要在清单中的 android:foregroundServiceType 下声明的前台服务类型
camera
在清单中声明的权限
FOREGROUND_SERVICE_CAMERA
要传递给 startForeground() 的常量
FOREGROUND_SERVICE_TYPE_CAMERA
运行时前提条件

请求并获得 CAMERA 运行时权限

注意CAMERA 运行时权限受使用时限制。因此,当您的应用位于后台时,您无法创建 camera 前台服务,但存在一些例外情况。如需了解详情,请参阅有关启动需要运行时权限的前台服务的限制

说明

继续在后台访问摄像头,例如支持多任务的视频聊天应用。

Appareil connecté

要在其清单中声明的前台服务类型
android:foregroundServiceType
connectedDevice
在清单中声明的权限
FOREGROUND_SERVICE_CONNECTED_DEVICE
要传递给 startForeground() 的常量
FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
运行时前提条件

必须至少满足以下其中一个条件:

说明

与需要蓝牙、NFC、IR、USB 或网络连接的外部设备进行互动。

替代方案

如果您的应用需要持续将数据传输到外部设备,请考虑改用配套设备管理器。使用配套设备在线状态 API 帮助您的应用在配套设备在范围内时保持运行。

如果您的应用需要扫描蓝牙设备,请考虑改用 Bluetooth Scanner API

Synchroniser les données

Type de service de premier plan à déclarer dans le fichier manifeste sous
android:foregroundServiceType
dataSync
Autorisation de déclarer dans votre fichier manifeste
FOREGROUND_SERVICE_DATA_SYNC
Constante à transmettre à startForeground()
FOREGROUND_SERVICE_TYPE_DATA_SYNC
Conditions requises pour l'environnement d'exécution
Aucune
Description

Opérations de transfert de données, telles que :

  • Importation ou téléchargement de données
  • Opérations de sauvegarde et restauration
  • Opérations d'importation ou d'exportation
  • Extraction de données
  • Traitement des fichiers en local
  • Transfert de données d'un appareil vers le cloud via un réseau
Autres solutions

Pour en savoir plus, consultez Alternatives aux services de premier plan de synchronisation de données.

Santé

Type de service de premier plan à déclarer dans le fichier manifeste sous
android:foregroundServiceType
health
Autorisation de déclarer dans votre fichier manifeste
FOREGROUND_SERVICE_HEALTH
Constante à transmettre à startForeground()
FOREGROUND_SERVICE_TYPE_HEALTH
Conditions requises pour l'environnement d'exécution

Vous devez remplir l'une des conditions suivantes :

Remarque:L'autorisation d'exécution BODY_SENSORS est soumise à des restrictions d'utilisation. Pour cette raison, vous ne pouvez pas créer de service de premier plan health qui utilise des capteurs corporels lorsque votre application est exécutée en arrière-plan, à quelques exceptions près. Pour en savoir plus, consultez la section Restrictions au démarrage de services de premier plan nécessitant des autorisations en cours d'utilisation.

Description

Tous les cas d'utilisation de longue durée pour prendre en charge les applications de la catégorie "Remise en forme", tels que les coachs électroniques d'entraînement.

Localisation

Type de service de premier plan à déclarer dans le fichier manifeste sous
android:foregroundServiceType
location
Autorisation à déclarer dans votre fichier manifeste
FOREGROUND_SERVICE_LOCATION
Constante à transmettre à startForeground()
FOREGROUND_SERVICE_TYPE_LOCATION
Conditions préalables à l'exécution

L'utilisateur doit avoir activé les services de localisation, et l'application doit disposer d'au moins l'une des autorisations d'exécution suivantes:

Remarque:Pour vérifier que l'utilisateur a activé les services de localisation et accordé l'accès aux autorisations d'exécution, utilisez PermissionChecker#checkSelfPermission().

Remarque:Les autorisations d'exécution d'accès à la position sont soumises à des restrictions d'utilisation. Pour cette raison, vous ne pouvez pas créer de service de premier plan location lorsque votre application est exécutée en arrière-plan, sauf si vous disposez de l'autorisation d'exécution ACCESS_BACKGROUND_LOCATION. Pour en savoir plus, consultez la section Restrictions concernant le démarrage de services de premier plan qui nécessitent des autorisations en cours d'utilisation.

Description

Cas d'utilisation de longue durée nécessitant un accès à la position, tels que la navigation et le partage de position.

Autres solutions

Si votre application doit être déclenchée lorsque l'utilisateur accède à des emplacements spécifiques, envisagez plutôt d'utiliser l'API Géoreence.

Contenus multimédias

要在其清单中声明的前台服务类型
android:foregroundServiceType
mediaPlayback
在清单中声明的权限
FOREGROUND_SERVICE_MEDIA_PLAYBACK
要传递给 startForeground() 的常量
FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
运行时前提条件
说明
在后台继续播放音频或视频。在 Android TV 上支持数字视频录制 (DVR) 功能。
替代方案
如果您显示的是画中画视频,请使用画中画模式

Projection multimédia

Type de service de premier plan à déclarer dans le fichier manifeste sous
android:foregroundServiceType
mediaProjection
Autorisation de déclarer dans votre fichier manifeste
FOREGROUND_SERVICE_MEDIA_PROJECTION
Constante à transmettre à startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
Conditions requises pour l'environnement d'exécution

Appelez la méthode createScreenCaptureIntent() avant de démarrer le service de premier plan. Une notification d'autorisation s'affiche. Celui-ci doit accorder l'autorisation pour que vous puissiez créer le service.

Après avoir créé le service de premier plan, vous pouvez appeler MediaProjectionManager.getMediaProjection().

Description

Projetez du contenu sur un écran externe ou un appareil externe à l'aide des API MediaProjection. Il ne doit pas nécessairement s'agir de contenu exclusivement multimédia.

Autres solutions

Pour diffuser du contenu multimédia sur un autre appareil, utilisez le SDK Google Cast.

Micro

要在其清单中声明的前台服务类型
android:foregroundServiceType
microphone
在清单中声明的权限
FOREGROUND_SERVICE_MICROPHONE
要传递给 startForeground() 的常量
FOREGROUND_SERVICE_TYPE_MICROPHONE
运行时前提条件

请求并获得 RECORD_AUDIO 运行时权限。

注意RECORD_AUDIO 运行时权限受使用时限制。因此,当您的应用位于后台时,您无法创建 microphone 前台服务,但存在一些例外情况。如需了解详情,请参阅有关启动需要运行时权限的前台服务的限制

说明

在后台继续捕获麦克风内容,例如录音器或通信应用。

Appel téléphonique

Type de service de premier plan à déclarer dans le fichier manifeste sous
android:foregroundServiceType
phoneCall
Autorisation de déclarer dans votre fichier manifeste
FOREGROUND_SERVICE_PHONE_CALL
Constante à transmettre à startForeground()
FOREGROUND_SERVICE_TYPE_PHONE_CALL
Conditions requises pour l'environnement d'exécution

Vous devez remplir au moins l'une des conditions suivantes:

  • L'application a déclaré l'autorisation MANAGE_OWN_CALLS dans son fichier manifeste.
  • Il s'agit de l'application de téléphonie par défaut via le rôle ROLE_DIALER.
Description

Continuez un appel en cours à l'aide des API ConnectionService.

Autres solutions

Si vous devez passer des appels téléphoniques, vidéo ou VoIP, envisagez d'utiliser la bibliothèque android.telecom.

Pensez à utiliser CallScreeningService pour filtrer les appels.

Messagerie à distance

Foreground service type to declare in manifest under
android:foregroundServiceType
remoteMessaging
Permission to declare in your manifest
FOREGROUND_SERVICE_REMOTE_MESSAGING
Constant to pass to startForeground()
FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING
Runtime prerequisites
None
Description
Transfer text messages from one device to another. Assists with continuity of a user's messaging tasks when they switch devices.

Service court

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

Quickly finish critical work that cannot be interrupted or postponed.

This type has some unique characteristics:

  • Can only run for a short period of time (about 3 minutes).
  • No support for sticky foreground services.
  • Cannot start other foreground services.
  • Doesn't require a type-specific permission, though it still requires the FOREGROUND_SERVICE permission.
  • A shortService can only change to another service type if the app is currently eligible to start a new foreground service.
  • A foreground service can change its type to shortService at any time, at which point the timeout period begins.

The timeout for shortService begins from the moment that Service.startForeground() is called. The app is expected to call Service.stopSelf() or Service.stopForeground() before the timeout occurs. Otherwise, the new Service.onTimeout() is called, giving apps a brief opportunity to call stopSelf() or stopForeground() to stop their service.

A short time after Service.onTimeout() is called, the app enters a cached state and is no longer considered to be in the foreground, unless the user is actively interacting with the app. A short time after the app is cached and the service has not stopped, the app receives an ANR. The ANR message mentions FOREGROUND_SERVICE_TYPE_SHORT_SERVICE. For these reasons, it's considered best practice to implement the Service.onTimeout() callback.

The Service.onTimeout() callback doesn't exist on Android 13 and lower. If the same service runs on such devices, it doesn't receive a timeout, nor does it ANR. Make sure that your service stops as soon as it finishes the processing task, even if it hasn't received the Service.onTimeout() callback yet.

It's important to note that if the timeout of the shortService is not respected, the app will ANR even if it has other valid foreground services or other app lifecycle processes running.

If an app is visible to the user or satisfies one of the exemptions that allow foreground services to be started from the background, calling Service.StartForeground() again with the FOREGROUND_SERVICE_TYPE_SHORT_SERVICE parameter extends the timeout by another 3 minutes. If the app isn't visible to the user and doesn't satisfy one of the exemptions, any attempt to start another foreground service, regardless of type, causes a ForegroundServiceStartNotAllowedException.

If a user disables battery optimization for your app, it's still affected by the timeout of shortService FGS.

If you start a foreground service that includes the shortService type and another foreground service type, the system ignores the shortService type declaration. However, the service must still adhere to the prerequisites of the other declared types. For more information, see the Foreground services documentation.

Utilisation spéciale

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>

Système exempté

Type de service de premier plan à déclarer dans le fichier manifeste sous
android:foregroundServiceType
systemExempted
Autorisation de déclarer dans votre fichier manifeste
FOREGROUND_SERVICE_SYSTEM_EXEMPTED
Constante à transmettre à startForeground()
FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED
Conditions requises pour l'environnement d'exécution
Aucune
Description

Réservé pour les applications système et les intégrations système spécifiques, afin de continuer à utiliser les services de premier plan.

Pour utiliser ce type, une application doit correspondre à au moins un des critères suivants :

  • L'appareil est en mode démo
  • L'application est un Device Owner
  • L'application est un Profiler Owner
  • Les applications de sécurité ayant le rôle ROLE_EMERGENCY
  • Les applications Device Admin
  • Applications disposant de l'autorisation SCHEDULE_EXACT_ALARM ou USE_EXACT_ALARM
  • Applications VPN (configurées sous Paramètres > Réseau et Internet > VPN)

    Autrement, le fait de déclarer ce type renvoie une exception ForegroundServiceTypeNotAllowedException.

Application des règles Google Play pour l'utilisation des types de services de premier plan

Si votre application cible Android 14 ou une version ultérieure, vous devez déclarer les types de services de premier plan de votre application sur la page du contenu de l'application dans la Play Console (Règles > Contenu de l'application). Pour savoir comment déclarer vos types de services de premier plan dans la Play Console, consultez la page Comprendre les exigences concernant les services de premier plan et l'intent plein écran.