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

Cette page explique les bonnes pratiques à suivre 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 l'outil de fusion de fichiers manifestes 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 position en arrière-plan. Nous vous recommandons de demander aux utilisateurs d'accorder l'autorisation d'accéder à la position "Toujours autoriser". Cela permet à l'application de s'exécuter en arrière-plan et d'afficher des notifications, ce qui optimise la précision de la localisation 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 la façon d'inviter les utilisateurs à 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.

Assurer un nettoyage correct des notifications de navigation

Pour vous assurer que votre application ne conserve pas les notifications lorsqu'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 à annuler son enregistrement.
  • Après avoir enregistré RoadSnappedLocationProvider, veillez à annuler son enregistrement.

En suivant ces étapes, vous vous assurez que les notifications ne sont pas conservées 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 appelez à nouveau les méthodes NavigationApi#initForegroundServiceManager, appelez 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 effectuer cette opération 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 localisation 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 d'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 détaillée. La navigation détaillée dépend de la possibilité d'accéder à la position de l'utilisateur afin de mettre à jour l'itinéraire et d'afficher les instructions visuelles et audio appropriées. À partir d'Android 14, l'accès à la position exacte de l'utilisateur en arrière-plan nécessite l'autorisation de l'utilisateur. Par défaut, si une application n'a pas l'autorisation de l'utilisateur d'accéder à la localisation en arrière-plan et qu'elle tente de démarrer un service de premier plan pour les notifications de position, le système génère une SecurityException, ce qui entraîne 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 impact sur 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 fichier 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 aucune notification n'est 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 du système peuvent ne pas être fréquentes ou précises, ce qui peut entraîner une expérience de navigation sous-optimale. Pour cette raison, nous vous recommandons de demander également 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 SDK Navigation en mettant à jour votre application pour demander aux utilisateurs l'accès à la localisation en arrière-plan. Pour en savoir plus, consultez Demander l'autorisation d'accéder à la position "Toujours autoriser".