Bonnes pratiques concernant l'utilisation des données de localisation en arrière-plan

Cette page décrit les bonnes pratiques pour demander et gérer les autorisations d'utilisation de la localisation en arrière-plan.

Demander l'autorisation d'accéder à la position "Toujours autoriser"

À partir d'Android 14, les applications doivent disposer de l'autorisation ACCESS_BACKGROUND_LOCATION pour accéder à la position de l'utilisateur. Le SDK Navigation inclut cette autorisation dans son fichier manifeste. Vous n'avez donc pas besoin de la demander explicitement (si elle n'est pas nécessaire à d'autres fins), car le programme de fusion du fichier manifeste Gradle s'assurera qu'elle est fusionnée avec le fichier manifeste de l'application.

Toutefois, l'autorisation ACCESS_BACKGROUND_LOCATION ne suffit pas pour accéder à la localisation en arrière-plan. Nous vous recommandons de demander aux utilisateurs l'autorisation de localisation "Toujours". Cela garantit que l'application peut s'exécuter en arrière-plan et afficher des notifications, ce qui maximise la précision de la position pendant la navigation.

L'invite doit expliquer aux utilisateurs comment l'octroi de l'autorisation améliorera la précision de la localisation et leur expérience de navigation lorsque l'application s'exécute en arrière-plan.

Exemple de boîte de dialogue d'autorisation

Pour en savoir plus sur l'invite à autoriser l'accès à la position, consultez Demander des autorisations d'accéder à la position | Capteurs et position | Développeurs Android dans la documentation pour les développeurs Android.

Assurez-vous que les notifications de navigation sont correctement supprimées.

Pour vous assurer que votre application ne maintient pas les notifications en vie une fois qu'elles ne sont plus nécessaires, veillez à effectuer les étapes de nettoyage suivantes :

  • Après avoir appelé startGuidance(), veillez à appeler stopGuidance() ou clearDestination().
  • Après avoir enregistré ArrivalListener, veillez à l'annuler.
  • Après avoir enregistré RoadSnappedLocationProvider, veillez à l'annuler.

En suivant ces étapes, vous vous assurez que les notifications ne restent pas actives lorsqu'elles ne sont plus nécessaires, ce qui pourrait entraîner une décharge de la batterie et d'éventuelles fuites de mémoire.

Lorsque vous réinvoquez les méthodes NavigationApi#initForegroundServiceManager, invoquez d'abord NavigationApi#clearForegroundServiceManager.

Si votre application utilise ForegroundServiceManager, appelez NavigationApi#clearForegroundServiceManager avant d'appeler NavigationApi#initForegroundServiceManagerProvider. Si vous avez déjà initialisé ForegroundServiceManager, appelez NavigationApi#initForegroundServiceManagerMessageAndIntent. Vous pouvez le faire pour mettre à jour l'ID ou le contenu de la notification après avoir initialisé le gestionnaire de services de premier plan.

À propos des nouvelles restrictions introduites dans Android 14

Android 14 (Android U) a introduit de nouvelles restrictions concernant l'accès des applications à la position de l'utilisateur en arrière-plan. Pour atténuer ces changements, le SDK Navigation a été mis à jour dans la version 5.4.0 afin de mieux gérer l'accès à la position en arrière-plan. Nous vous recommandons également de mettre à jour votre implémentation pour vous assurer que votre application continue d'avoir accès aux données de localisation les plus précises.

Impact des modifications apportées à Android 14 sur le SDK Navigation

Lorsque vous appelez startGuidance() dans votre application, le service de premier plan commence à afficher des notifications utilisateur pour la navigation guidée. La navigation détaillée dépend de la possibilité d'accéder à la position de l'utilisateur pour mettre à jour l'itinéraire et afficher les conseils visuels et audio appropriés. À partir d'Android 14, l'accès à la position précise de l'utilisateur en arrière-plan nécessite son autorisation. Par défaut, si une application ne dispose pas de l'autorisation de l'utilisateur pour accéder à la localisation en arrière-plan et tente de démarrer un service de premier plan pour les mises à jour de localisation, le système génère une SecurityException, ce qui provoque le plantage de l'application.

Comment le SDK Navigation atténue ce problème

À partir de la version 5.4.0, le SDK Navigation gère ce SecurityException sans impacter l'application, ce qui permet à la navigation de continuer à s'exécuter en arrière-plan. De plus, le SDK Navigation inclut l'autorisation ACCESS_BACKGROUND_LOCATION dans son AndroidManifest. Ainsi, votre application n'a pas besoin de déclarer l'autorisation elle-même, car la fusion Gradle s'en chargera. Toutefois, si une notification n'est pas affichée à l'utilisateur avant que l'application ne passe en arrière-plan, le SDK Navigation s'appuiera sur le système pour fournir des mises à jour de la position. Ces mises à jour système peuvent ne pas être fréquentes ni précises, ce qui peut entraîner une expérience de navigation non optimale. Pour cette raison, nous vous recommandons également de demander aux utilisateurs l'accès à la localisation en arrière-plan.

Ce que les développeurs d'applications peuvent faire pour améliorer la précision de la localisation pour la navigation

Vous pouvez améliorer la précision du signal de localisation utilisé par le Navigation SDK en mettant à jour votre application pour inviter les utilisateurs à autoriser l'accès à la localisation en arrière-plan. Pour en savoir plus, consultez Demander l'autorisation d'accéder à la position "Toujours autoriser".