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

Cette page décrit les bonnes pratiques à suivre pour demander et gérer les autorisations d'utilisation de la position 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 la 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 n'est pas suffisante pour accéder aux données de localisation en arrière-plan. Nous vous recommandons de demander aux utilisateurs l'autorisation "Toujours autoriser" pour les données de localisation. 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 en quoi 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 demande d'autorisation d'accéder à la position aux utilisateurs, consultez Demander des autorisations d'accéder à la position | Capteurs et position | Développeurs Android dans la documentation destinée aux développeurs Android.

Assurer un nettoyage approprié des notifications de navigation

Pour vous assurer que votre application ne conserve pas les notifications après 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 des fuites de mémoire.

Lorsque vous réappelez 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 le faire pour mettre à jour l'ID de notification 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 sur les applications qui accèdent à la position de l'utilisateur en arrière-plan. Pour atténuer ces modifications, le SDK Navigation a été mis à jour vers 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 d'Android 14 sur le SDK Navigation

Lorsque vous appelez startGuidance() dans votre application, le service de premier plan commence à afficher des notifications pour l'utilisateur pour la navigation par étapes. 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 son autorisation. Par défaut, si une application ne dispose pas de l'autorisation de l'utilisateur pour accéder aux données de localisation en arrière-plan et qu'elle tente de démarrer un service de premier plan pour les mises à jour 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-t-il ce problème ?

À partir de la version 5.4.0, le SDK Navigation gère cette SecurityException sans affecter l'application, ce qui permet à la navigation de continuer à s'exécuter en arrière-plan. En outre, 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 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 position. Ces mises à jour du système peuvent ne pas être fréquentes ni précises, et entraîner une expérience de navigation non optimale. C'est pourquoi nous vous recommandons également d'inviter les utilisateurs à autoriser l'accès aux données de localisation en arrière-plan.

Ce que les développeurs d'applications peuvent faire pour améliorer la précision de la position 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 inviter les utilisateurs à autoriser l'accès à la position en arrière-plan. Pour en savoir plus, consultez la section Demander l'autorisation d'accéder à la position de type "Toujours autoriser".