Il existe plusieurs façons de demander les informations de localisation de l'utilisateur sur Android, et la meilleure approche varie selon le cas d'utilisation. Ce guide décrit différents scénarios d'accès à la localisation et explique comment demander des autorisations d'accès à la localisation dans chaque cas.
Pour commencer, consultez les bonnes pratiques pour toutes les autorisations d'exécution, ainsi que les conseils plus généraux pour réduire les demandes d'autorisations.
Types d'accès à la position
Chaque autorisation présente une combinaison des caractéristiques suivantes :
- Catégorie : localisation au premier plan ou localisation en arrière-plan.
- Précision : position exacte ou approximative.
Localisation au premier plan
Si votre application contient une fonctionnalité qui ne partage ou ne reçoit des informations de localisation qu'une seule fois, ou pendant une durée déterminée, un accès à la localisation au premier plan est nécessaire. Quelques exemples :
- Dans une application de navigation, une fonctionnalité permet aux utilisateurs d'obtenir des instructions de navigation détaillées.
- Dans une application de chat, une fonctionnalité permet aux utilisateurs de partager leur position actuelle avec un autre utilisateur.
Le système considère que votre application utilise la localisation au premier plan si l'une des fonctionnalités de votre application accède à la position actuelle de l'appareil dans l'une des situations suivantes :
- Une activité liée à votre application est visible.
Votre application exécute un service de premier plan. Lorsqu'un service de premier plan est en cours d'exécution, le système le fait savoir à l'utilisateur en affichant une notification permanente. Votre application conserve l'accès lorsqu'elle est placée en arrière-plan (par exemple, lorsque l'utilisateur appuie sur le bouton Accueil ou éteint l'écran de son appareil).
Vous devez également déclarer un type de service de premier plan de
location, comme indiqué dans l'extrait de code suivant. Sur Android 10 (niveau d'API 29) ou version ultérieure, vous devez déclarer ce type de service de premier plan.<!-- Recommended for Android 9 (API level 28) and lower. --> <!-- Required for Android 10 (API level 29) and higher. --> <service android:name="MyNavigationService" android:foregroundServiceType="location" ... > <!-- Any inner elements would go here. --> </service>
Vous déclarez que la localisation au premier plan est nécessaire lorsque votre application demande l'autorisation
ACCESS_COARSE_LOCATION ou l'autorisation ACCESS_FINE_LOCATION, comme indiqué dans l'extrait de code suivant :
<manifest ... >
<!-- Always include this permission -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Include only if your app benefits from precise location access. -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
Accès unique : en plus d'accéder aux données de localisation au premier plan, certains cas d'utilisation se distinguent par le fait qu'ils n'ont besoin d'accéder à la position de l'utilisateur qu'à des moments spécifiques de l'expérience de l'application, au lieu d'une mise à jour constante tout au long de l'utilisation de l'application. Dans ces cas, les applications doivent utiliser le bouton de localisation pour demander l'accès à la localisation pour cette session d'utilisation de l'application. De plus, si votre application cible Android 17 (niveau d'API 37) ou une version ultérieure et ne contient que des fonctionnalités nécessitant un accès à la localisation basé sur la session, le règlement de Google Play vous oblige à utiliser le bouton de localisation. Pour en savoir plus, consultez le règlement concernant le bouton de localisation policy.
Localisation en arrière-plan
Une application nécessite un accès à la localisation en arrière-plan si l'une de ses fonctionnalités partage en continu sa position avec d'autres utilisateurs ou utilise l'API Geofencing. Quelques exemples :
- Dans une application de partage de position avec la famille, une fonctionnalité permet aux utilisateurs de partager leur position en continu avec les membres de leur famille.
- Dans une application IoT, une fonctionnalité permet à l'utilisateur de configurer ses appareils connectés de sorte qu'ils s'éteignent lorsqu'il quitte la maison, puis se rallument à son retour.
Le système considère que votre application utilise la localisation en arrière-plan si elle accède à la position actuelle de l'appareil dans une situation autre que celles décrites dans la section Localisation au premier plan. La précision de la localisation en arrière-plan est identique à celle de la localisation au premier plan et dépend des autorisations d'accès à la position déclarées par votre application.
Sur Android 10 (niveau d'API 29) ou version ultérieure, vous devez déclarer l'
ACCESS_BACKGROUND_LOCATION dans le fichier manifeste de votre application afin de
demander l'accès à la localisation en arrière-plan au moment de l'exécution. Sur les versions antérieures d'Android, lorsque votre application reçoit un accès à la localisation au premier plan, elle reçoit également automatiquement l'accès à la localisation en arrière-plan.
<manifest ... >
<!-- Required only when requesting background location access on
Android 10 (API level 29) and higher. -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>
Précision
Android est compatible avec les niveaux suivants de précision de la position :
- Approximative
- Fournit une estimation de la position de l'appareil. Si cette estimation provient
du
LocationManagerServiceouFusedLocationProvider, cette estimation est précise à environ 3 kilomètres carrés (environ 1,2 milles). Votre application peut recevoir une position avec ce niveau de précision lorsque vous déclarez l'autorisationACCESS_COARSE_LOCATION, mais pas l'autorisationACCESS_FINE_LOCATION. - Exacte
- Fournit une estimation de la position de l'appareil aussi précise que possible.
Si cette estimation provient de
LocationManagerServiceouFusedLocationProvider, la précision est généralement de 50 mètres environ, voire de l'ordre de quelques mètres (ou moins) dans certains cas. Votre application peut recevoir une position avec ce niveau de précision lorsque vous déclarez l'autorisationACCESS_FINE_LOCATION.
Si l'utilisateur accorde l'autorisation d'accéder à la position approximative, votre application n'a accès qu'à la position approximative, quelles que soient les autorisations d'accès déclarées par votre application.
Le fait que l'utilisateur n'accorde qu'un accès à la position approximative ne devrait pas empêcher votre application de fonctionner. Si une fonctionnalité de votre application a absolument besoin de la position exacte
à l'aide de l'autorisation ACCESS_FINE_LOCATION, vous pouvez demander à l'utilisateur d'autoriser votre
application à accéder à cette précision de localisation.
Rappel d'octroi de la localisation en arrière-plan
Sur Android 10 (niveau d'API 29) ou version ultérieure, la première fois qu'une fonctionnalité de votre application accède à la localisation en arrière-plan de l'appareil après que l'utilisateur a accordé l'accès à la localisation en arrière-plan, le système planifie une notification à envoyer à l'utilisateur. Cette notification lui rappelle qu'il a accordé à l'application un accès permanent à la position de l'appareil. La figure 8 montre un exemple de notification.
Vérifier les exigences de localisation dans les dépendances du SDK de votre application
Vérifiez si votre application utilise des SDK qui dépendent des autorisations d'accéder à la position, en particulier l'autorisation ACCESS_FINE_LOCATION. Pour en savoir plus, consultez l'article de blog Medium Getting to know the
behaviors of your SDK dependencies (Comprendre les comportements de vos dépendances SDK) pour
plus.
Ressources supplémentaires
Pour en savoir plus sur les autorisations d'accéder à la position sur Android, consultez les ressources suivantes :
Ateliers de programmation
Vidéos
Exemples
- Application exemple pour illustrer l'utilisation des autorisations d'accéder à la position