Cette page explique les bonnes pratiques pour demander et gérer les autorisations d'utilisation de la position en arrière-plan.
Demander les autorisations d'accéder à la position de type "Toujours autoriser"
À partir d'Android 14, les applications doivent disposer de l'
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 fusionneur de manifestes Gradle s'assurera qu'elle est fusionnée avec le 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 les autorisations d'accéder à la position de type "Toujours autoriser". Cela permet à l'application de s'exécuter en arrière-plan et d'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 position et leur expérience de navigation lorsque l'application s'exécute en arrière-plan.
Pour en savoir plus sur l'invitation des utilisateurs à autoriser l'accès à la position, consultez Demander des autorisations d'accès à la position | Capteurs et position | Développeurs Android dans la documentation pour les développeurs Android.
S'assurer que les notifications de navigation sont correctement nettoyées
Pour vous assurer que votre application ne conserve pas les notifications une fois qu'elles ne sont plus nécessaires, procédez comme suit :
- Après avoir appelé
startGuidance(), veillez à appelerstopGuidance()ouclearDestination(). - 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 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 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 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 pas à pas. La navigation pas à pas dépend de la possibilité d'accéder à la position de l'utilisateur pour mettre à jour l'itinéraire et 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 à la position en arrière-plan et tente de démarrer un service de premier plan pour les mises à jour de la 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 cette 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 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 les mises à jour de la position. Ces mises à jour du système peuvent ne pas être fréquentes ni précises, ce qui peut entraîner une expérience de navigation sous-optimale. C'est pourquoi nous vous recommandons également d'inviter les utilisateurs à autoriser l'accès à la position 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 position 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 Demander les autorisations d'accéder à la position de type "Toujours autoriser".