Limites de localisation en arrière-plan

Afin de réduire la consommation d'énergie, Android 8.0 (niveau d'API 26) limite la fréquence à laquelle une application peut récupérer la position actuelle de l'utilisateur lorsqu'elle s'exécute en arrière-plan. Dans ces conditions, les applications ne peuvent recevoir des notifications de position que quelques fois par heure.

Remarque : Ces limites s'appliquent à toutes les applications utilisées sur les appareils équipés d'Android 8.0 (niveau d'API 26) ou version ultérieure, quelle que soit la version du SDK cible de l'application.

Ce comportement de récupération de position est particulièrement important à garder à l'esprit si votre application repose sur des alertes en temps réel ou sur la détection de mouvement en arrière-plan.

Le comportement de l'application au premier plan est préservé

Si une application est exécutée au premier plan sur un appareil équipé d'Android 8.0 (niveau d'API 26), le comportement de mise à jour de la position est le même que sur Android 7.1.1 (niveau d'API 25) ou version antérieure.

Avertissement:Si votre application récupère des mises à jour de position en temps quasi réel sur une longue période, l'autonomie de la batterie de l'appareil diminue considérablement.

Ajuster le comportement de localisation de votre application

Déterminez si les cas d'utilisation de l'exécution en arrière-plan de votre application ne peuvent pas aboutir si elle reçoit des mises à jour de position peu fréquentes. Dans ce cas, vous pouvez récupérer les notifications de position plus fréquemment en effectuant l'une des actions suivantes:

  • Faites passer votre application au premier plan.
  • Démarrez un service de premier plan dans votre application en appelant startForegroundService(). Lorsqu'un service de premier plan de ce type est actif, il apparaît comme une notification d'activité en cours dans la zone de notification.

    Attention:Si votre application démarre un service de premier plan lorsqu'elle s'exécute en arrière-plan sur un appareil exécutant Android 11 (niveau d'API 30) ou une version ultérieure, elle ne peut pas accéder aux informations de localisation, sauf si l'utilisateur lui a accordé l'autorisation ACCESS_BACKGROUND_LOCATION. Pour en savoir plus, consultez les conseils sur les restrictions d'utilisation associées aux services de premier plan.

  • Utilisez des éléments de l'API Geofencing, tels que GeofencingClient, qui sont optimisés pour réduire la consommation d'énergie.
  • Utilisez un écouteur de localisation passif, qui peut recevoir des mises à jour de position plus rapidement si des applications au premier plan demandent des notifications de position plus rapidement.

Remarque:Si votre application a besoin d'accéder à l'historique des positions contenant des mises à jour fréquentes, utilisez la version par lot des éléments de l'API Fused Location Provider, comme l'interface FusedLocationProviderApi. Lorsque votre application s'exécute en arrière-plan, cette API reçoit la position de l'utilisateur plus souvent que l'API sans traitement par lot. Toutefois, n'oubliez pas que votre application ne reçoit des mises à jour par lots que quelques fois par heure.

API concernées

Les modifications apportées au comportement de récupération de la position dans les applications en arrière-plan affectent les API suivantes:

Fused Location Provider (FLP)
  • Si votre application s'exécute en arrière-plan, le service de système de localisation ne calcule un nouvel emplacement pour votre application que quelques fois par heure. même lorsque votre application demande des mises à jour de la position plus fréquentes.

    Toutefois, en utilisant la version par lot de FLP, vous avez accès à un historique des positions plus fréquent après la réception d'une mise à jour groupée par votre application, qui ne se produit que quelques fois par heure.

  • Si votre application s'exécute au premier plan, les taux d'échantillonnage de la localisation ne changent pas par rapport à Android 7.1.1 (niveau d'API 25).
Géorepérage
  • Les applications en arrière-plan peuvent recevoir des événements de transition de géorepérage plus souvent que les mises à jour du Fused Location Provider.
  • La réactivité moyenne d'un événement de géorepérage est d'environ deux minutes.
Mesures GNSS et messages de navigation GNSS
  • Lorsque votre application est exécutée en arrière-plan, les rappels enregistrés pour recevoir les résultats de GnssMeasurement et de GnssNavigationMessage cessent de s'exécuter.
Gestionnaire d'établissements
  • Les mises à jour de la position ne sont fournies aux applications en arrière-plan que quelques fois par heure.

    Remarque:Si votre application s'exécute sur un appareil sur lequel les services Google Play sont installés, nous vous recommandons vivement d'utiliser plutôt le Fused Location Provider (FLP).

Gestionnaire Wi-Fi
La méthode startScan() effectue une analyse complète des applications en arrière-plan quelques fois par heure seulement. Si une application en arrière-plan appelle à nouveau la méthode peu de temps après, la classe WifiManager fournit les résultats mis en cache de l'analyse précédente.