À 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 d'application 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- Prérequis d'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é
- Type de service de premier plan à déclarer dans le fichier manifeste sous
android:foregroundServiceTypeconnectedDevice- Autorisation à déclarer dans votre fichier manifeste
FOREGROUND_SERVICE_CONNECTED_DEVICE- Constante à transmettre à
startForeground() FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE- Conditions préalables d'exécution
Vous devez remplir l'une des conditions suivantes :
Déclarez au moins l'une des autorisations suivantes dans votre fichier manifeste :
Demandez et obtenez au moins l'une des autorisations d'exécution suivantes:
Appeler
UsbManager.requestPermission()
- Description
Interactions avec des appareils externes nécessitant une connexion Bluetooth, NFC, IR, USB ou réseau.
- Autres solutions
Si votre application doit effectuer un transfert de données continu vers un appareil externe, envisagez d'utiliser le gestionnaire d'appareils associés à la place. Utilisez l'API de présence de l'appareil associé pour que votre application reste en cours d'exécution lorsque l'appareil associé est à portée.
Si votre application doit rechercher des appareils Bluetooth, envisagez plutôt d'utiliser l'API de recherche Bluetooth.
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- Prérequis 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 Autres solutions 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
- Type de service de premier plan à déclarer dans le fichier manifeste sous
android:foregroundServiceTypemediaPlayback- Autorisation à déclarer dans votre fichier manifeste
FOREGROUND_SERVICE_MEDIA_PLAYBACK- Constante à transmettre à
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- Prérequis d'exécution
- Aucune
- Description
Continuez la lecture audio ou vidéo en arrière-plan. Prend en charge la fonctionnalité d'enregistrement vidéo numérique (DVR) sur Android TV.
- Autres solutions
Si vous affichez une vidéo en mode Picture-in-Picture, utilisez le mode Picture-in-Picture.
Traitement multimédia
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceTypemediaProcessing- 在清单中声明的权限
FOREGROUND_SERVICE_MEDIA_PROCESSING- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING- 运行时前提条件
- 无
- 说明
用于对媒体资源执行耗时的操作(例如将媒体转换为其他格式)的服务。系统允许此服务运行的时间有限;在正常情况下,此时限为每天 24 小时中的 6 小时。(此限制由应用的所有
mediaProcessing前台服务共享。)在以下情况下,您的应用应手动停止媒体处理服务:
- 当转码操作完成或达到失败状态时,让服务调用
Service.stopForeground()和Service.stopSelf()以完全停止服务。
- 当转码操作完成或达到失败状态时,让服务调用
如果超时期限已到,系统会调用服务的
Service.onTimeout(int, int)方法。此时,该服务有几秒钟的时间来调用Service.stopSelf()。如果服务未调用Service.stopSelf(),则会发生 ANR,并显示以下错误消息:“<fgs_type> 的前台服务未在超时时间内停止:<component_name>”。注意:
Service.onTimeout(int, int)不适用于 Android 14 或更低版本。在搭载这些版本的设备上,如果媒体处理服务达到超时期限,系统会立即缓存应用。因此,您的应用不应等待收到超时通知。相反,它应在适当情况下尽快终止前台服务或将其更改为后台服务。
Projection multimédia
- Type de service de premier plan à déclarer dans le fichier manifeste sous
android:foregroundServiceTypemediaProjection- Autorisation à déclarer dans votre fichier manifeste
FOREGROUND_SERVICE_MEDIA_PROJECTION- Constante à transmettre à
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- Conditions préalables à l'exécution
Appelez la méthode
createScreenCaptureIntent()avant de démarrer le service de premier plan. Une notification d'autorisation s'affiche alors pour l'utilisateur, qui doit l'accorder avant que vous puissiez créer le service.Une fois le service de premier plan créé, 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 des contenus multimédias en streaming sur un autre appareil, utilisez le SDK Google Cast.
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
Vous devez remplir au moins l'une des conditions suivantes :
- 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
ROLE_DIALERrôle.
- L'application est l'application de téléphone par défaut via le
- Description
Poursuivez un appel en cours à l'aide des
ConnectionServiceAPI.- Autres solutions
Si vous devez passer des appels téléphoniques, vidéo ou VoIP, envisagez d'utiliser la
android.telecombibliothèque.Envisagez d'utiliser
CallScreeningServicepour filtrer les appels.
Messagerie à distance
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceTyperemoteMessaging- 在清单中声明的权限
FOREGROUND_SERVICE_REMOTE_MESSAGING- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING- 运行时前提条件
- 无
- 说明
- 将短信从一台设备转移到另一台设备。在用户切换设备时,帮助确保用户消息任务的连续性。
Service court
- Type de service de premier plan à déclarer dans le fichier manifeste sous
android:foregroundServiceTypeshortService- Autorisation à déclarer dans votre fichier manifeste
- Aucune
- Constante à transmettre à
startForeground() FOREGROUND_SERVICE_TYPE_SHORT_SERVICE- Conditions préalables d'exécution
- Aucune
- Description
Finalisez rapidement les tâches essentielles qui ne peuvent pas être interrompues ni reportées.
Ce type présente des caractéristiques uniques :
- Il ne peut être exécuté que sur une courte période (environ trois minutes).
- Il est incompatible avec les services de premier plan persistants.
- Il ne peut démarrer d'autres services de premier plan.
- Il ne nécessite pas d'autorisation spécifique à un type, bien que l'autorisation
FOREGROUND_SERVICEreste nécessaire. - Un
shortServicene peut passer à un autre type de service que si l'application est actuellement éligible au démarrage d'un nouveau service de premier plan. - Un service de premier plan peut modifier son type en
shortServiceà tout moment, à partir de quoi le délai avant expiration commence.
Le délai d'inactivité pour shortService commence à partir du moment où
Service.startForeground()est appelé. L'application doit appelerService.stopSelf()ouService.stopForeground()avant l'expiration du délai. Sinon, le nouveauService.onTimeout()est appelé, ce qui permet aux applications d'appeler brièvementstopSelf()oustopForeground()pour arrêter leur service.Peu après l'appel de
Service.onTimeout(), l'application passe dans un état mis en cache et n'est plus considérée comme étant de premier plan, sauf si l'utilisateur interagit activement avec elle. Peu de temps après la mise en cache de l'application et l'arrêt du service, celle-ci reçoit une erreur ANR. Le message ANR mentionneFOREGROUND_SERVICE_TYPE_SHORT_SERVICE. Pour ces raisons, il est recommandé d'implémenter le rappelService.onTimeout().Le rappel
Service.onTimeout()n'existe pas sur Android 13 ou version antérieure. Si le même service s'exécute sur ces appareils, il ne reçoit pas de délai d'inactivité ni d'erreur ANR. Assurez-vous que votre service s'arrête dès la fin de la tâche de traitement, même s'il n'a pas encore reçu le rappelService.onTimeout().Notez que si le délai d'expiration de
shortServicen'est pas respecté, l'application sera ANR, même si d'autres services de premier plan valides ou d'autres processus de cycle de vie de l'application sont en cours d'exécution.Si une application est visible par l'utilisateur ou qu'elle satisfait l'une des exceptions permettant de démarrer les services de premier plan en arrière-plan, appeler à nouveau
Service.StartForeground()avec le paramètreFOREGROUND_SERVICE_TYPE_SHORT_SERVICEprolonge le délai avant expiration de trois minutes. Si l'application n'est pas visible par l'utilisateur et qu'elle ne satisfait pas l'une des exceptions, toute tentative de démarrage d'un autre service de premier plan, quel que soit son type, entraîne uneForegroundServiceStartNotAllowedExceptionSi un utilisateur désactive l'optimisation de la batterie pour votre application, cette dernière sera toujours affectée par le délai d'inactivité du shortService du service de premier plan.
Si vous démarrez un service de premier plan qui inclut le type
shortServiceet un autre type de service de premier plan, le système ignore la déclaration du typeshortService. Toutefois, le service doit toujours respecter les conditions préalables des autres types déclarés. Pour en savoir plus, consultez la documentation sur les services de premier plan.
Utilisation spéciale
- 要在清单中声明的前台服务类型
android:foregroundServiceTypespecialUse- 在清单中声明的权限
FOREGROUND_SERVICE_SPECIAL_USE- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_SPECIAL_USE- 运行时前提条件
- 无
- 说明
涵盖其他前台服务类型未涵盖的所有有效前台服务用例。
除了声明
FOREGROUND_SERVICE_TYPE_SPECIAL_USE前台服务类型之外,开发者还应在清单中声明用例。为此,他们会在<service>元素内指定<property>元素。这些值和相应的应用场景 。用途 您提供的案例均为自由形式,因此,您应确保提供足够的 相关信息,让审核人员了解您为何需要使用specialUse类型。<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.