À 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
- Type de service de premier plan à déclarer dans le fichier manifeste sous
android:foregroundServiceType camera- Autorisation à déclarer dans votre fichier manifeste
FOREGROUND_SERVICE_CAMERA- Constante à transmettre à
startForeground() FOREGROUND_SERVICE_TYPE_CAMERA- Conditions préalables à l'exécution
Demander et obtenir l'autorisation d'exécution
CAMERA- Description
Continuez à avoir accès à la caméra en arrière-plan, pour les applications de chat vidéo permettant d'effectuer plusieurs tâches en même temps, par exemple.
Appareil connecté
- Foreground service type to declare in manifest under
android:foregroundServiceTypeconnectedDevice- 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:
Declare at least one of the following permissions in your manifest:
Request and be granted at least one of the following runtime permissions:
- 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.
Synchroniser les données
- Type de service de premier plan à déclarer dans le fichier manifeste sous
android:foregroundServiceTypedataSync- Autorisation à déclarer dans votre fichier manifeste
FOREGROUND_SERVICE_DATA_SYNC- Constante à transmettre à
startForeground() FOREGROUND_SERVICE_TYPE_DATA_SYNC- Conditions préalables à l'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 des données.
Santé
- Type de service de premier plan à déclarer dans le fichier manifeste sous
android:foregroundServiceTypehealth- Autorisation à déclarer dans votre fichier manifeste
FOREGROUND_SERVICE_HEALTH- Constante à transmettre à
startForeground() FOREGROUND_SERVICE_TYPE_HEALTH- Conditions préalables d'exécution
Vous devez remplir l'une des conditions suivantes :
Déclarez l'autorisation
HIGH_SAMPLING_RATE_SENSORSdans votre fichier manifeste.Demandez et obtenez au moins l'une des autorisations d'exécution suivantes:
BODY_SENSORSavec l'API 35 ou version antérieureREAD_HEART_RATEREAD_SKIN_TEMPERATUREREAD_OXYGEN_SATURATIONACTIVITY_RECOGNITION
- 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:foregroundServiceTypelocation- Autorisation à déclarer dans votre fichier manifeste
FOREGROUND_SERVICE_LOCATION- Constante à transmettre à
startForeground() FOREGROUND_SERVICE_TYPE_LOCATION- Conditions préalables d'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:
- 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 atteint des emplacements spécifiques, envisagez plutôt d'utiliser l'API Geofence.
Contenus multimédias
- Foreground service type to declare in manifest under
android:foregroundServiceTypemediaPlayback- Permission to declare in your manifest
FOREGROUND_SERVICE_MEDIA_PLAYBACK- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- Runtime prerequisites
- None
- Description
Continue audio or video playback from the background. Support Digital Video Recording (DVR) functionality on Android TV.
- Alternatives
If you're showing picture-in-picture video, use Picture-in-Picture mode.
Traitement multimédia
- Foreground service type to declare in manifest under
android:foregroundServiceTypemediaProcessing- Permission to declare in your manifest
FOREGROUND_SERVICE_MEDIA_PROCESSING- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING- Runtime prerequisites
- None
- Description
Service for performing time-consuming operations on media assets, like converting media to different formats. The system allows this service a limited time to run; under normal circumstances, this time limit would be 6 hours out of every 24. (This limit is shared by all of an app's
mediaProcessingforeground services.)Your app should manually stop the media processing service in the following scenario:
- When the transcoding operation finishes or reaches a failure state, have the
service call
Service.stopForeground()andService.stopSelf()to stop the service completely.
- When the transcoding operation finishes or reaches a failure state, have the
service call
If the timeout period is reached, the system calls the service's
Service.onTimeout(int, int)method. At this time, the service has a few seconds to callService.stopSelf(). If the service does not callService.stopSelf(), an ANR will occur with this error message: "A foreground service of <fgs_type> did not stop within its timeout: <component_name>".Note:
Service.onTimeout(int, int)is not available on Android 14 or lower. On devices running those versions, if a media processing service reaches the timeout period, the system immediately caches the app. For this reason, your app shouldn't wait to get a timeout notification. Instead, it should terminate the foreground service or change it to a background service as soon as appropriate.
Projection multimédia
- Foreground service type to declare in manifest under
android:foregroundServiceTypemediaProjection- Permission to declare in your manifest
FOREGROUND_SERVICE_MEDIA_PROJECTION- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- Runtime prerequisites
Call the
createScreenCaptureIntent()method before starting the foreground service. Doing so shows a permission notification to the user; the user must grant the permission before you can create the service.After you have created the foreground service, you can call
MediaProjectionManager.getMediaProjection().- Description
Project content to non-primary display or external device using the
MediaProjectionAPIs. This content doesn't have to be exclusively media content.- Alternatives
To stream media to another device, use the Google Cast SDK.
Micro
- Type de service de premier plan à déclarer dans le fichier manifeste sous
android:foregroundServiceTypemicrophone- Autorisation à déclarer dans votre fichier manifeste
FOREGROUND_SERVICE_MICROPHONE- Constante à transmettre à
startForeground() FOREGROUND_SERVICE_TYPE_MICROPHONE- Conditions préalables à l'exécution
Demandez et obtenez l'autorisation d'exécution
RECORD_AUDIO.- Description
Continuez à utiliser le micro en arrière-plan, par exemple pour un enregistreur vocal ou une application de communication.
Appel téléphonique
- Type de service de premier plan à déclarer dans le fichier manifeste sous
android:foregroundServiceTypephoneCall- Autorisation à déclarer dans votre fichier manifeste
FOREGROUND_SERVICE_PHONE_CALL- Constante à transmettre à
startForeground() FOREGROUND_SERVICE_TYPE_PHONE_CALL- Conditions préalables à l'exécution
Au moins l'une des conditions suivantes doit être remplie :
- L'application a déclaré l'autorisation
MANAGE_OWN_CALLSdans son fichier manifeste.
- L'application a déclaré l'autorisation
- L'application est l'application de téléphone par défaut via le rôle
ROLE_DIALER.
- L'application est l'application de téléphone par défaut via le rôle
- Description
Poursuivez un appel en cours à l'aide des API
ConnectionService.- Autres solutions
Si vous devez passer des appels téléphoniques, vidéo ou VoIP, pensez à utiliser la bibliothèque
android.telecom.Envisagez d'utiliser
CallScreeningServicepour filtrer les appels.
Messagerie à distance
- Foreground service type to declare in manifest under
android:foregroundServiceTyperemoteMessaging- 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:foregroundServiceTypeshortService- 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_SERVICEpermission. - A
shortServicecan 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
shortServiceat 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 callService.stopSelf()orService.stopForeground()before the timeout occurs. Otherwise, the newService.onTimeout()is called, giving apps a brief opportunity to callstopSelf()orstopForeground()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 mentionsFOREGROUND_SERVICE_TYPE_SHORT_SERVICE. For these reasons, it's considered best practice to implement theService.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 theService.onTimeout()callback yet.It's important to note that if the timeout of the
shortServiceis 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 theFOREGROUND_SERVICE_TYPE_SHORT_SERVICEparameter 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 aForegroundServiceStartNotAllowedException.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
shortServicetype and another foreground service type, the system ignores theshortServicetype 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
- Type de service de premier plan à déclarer dans le fichier manifeste sous
android:foregroundServiceTypespecialUse- Autorisation à déclarer dans votre fichier manifeste
FOREGROUND_SERVICE_SPECIAL_USE- Constante à transmettre à
startForeground() FOREGROUND_SERVICE_TYPE_SPECIAL_USE- Conditions préalables d'exécution
- Aucune
- Description
Recouvre les cas d'utilisation de services de premier plan valides qui ne sont pas couverts par les autres types de services de premier plan.
En plus de déclarer le type de service de premier plan
FOREGROUND_SERVICE_TYPE_SPECIAL_USE, les développeurs doivent déclarer les cas d'utilisation dans le fichier manifeste. Pour ce faire, ils doivent spécifier l'élément<property>dans l'élément<service>. Ces valeurs et les cas d'utilisation correspondants sont examinés lorsque vous envoyez votre application dans la Google Play Console. Les cas d'utilisation que vous fournissez sont libres et vous devez vous assurer de fournir suffisamment d'informations pour permettre à l'examinateur de voir pourquoi vous devez utiliser le typespecialUse.<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:foregroundServiceTypesystemExempted- 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_ALARMouUSE_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 "Contenu de l'application" de la Play Console (Règles > Contenu de l'application). Pour en savoir plus sur la déclaration de vos types de services de premier plan dans la Play Console, consultez Comprendre les exigences liées aux services de premier plan et à l'intent plein écran.