À l'aide des API de localisation des services Google Play, votre application peut demander la dernière localisation connue de l'appareil de l'utilisateur. Dans la plupart des cas, vous voulez connaître la localisation actuelle de l'utilisateur, c'est-à-dire en général la dernière localisation connue de l'appareil.
Utilisez spécifiquement Fused Location Provider pour récupérer la dernière localisation connue de l'appareil. Fused Location Provider est l'une des API de localisation des services Google Play. Elle gère la technologie de localisation sous-jacente et fournit une API simple vous permettant de spécifier des exigences générales à haut niveau, comme la haute précision ou la faible consommation d'énergie. Elle optimise en outre l'utilisation de la batterie de l'appareil.
Remarque : Lorsque votre application s'exécute en arrière-plan, l'accès à la localisation doit être essentiel au fonctionnement même de l'application et doit être déclaré en bonne et due forme aux utilisateurs.
Dans cette leçon, vous allez découvrir comment effectuer une demande simple de localisation d'un appareil à l'aide de la méthode getLastLocation()
du Fused Location Provider.
Configurer les services Google Play
Pour accéder au Fused Location Provider, le projet de développement de votre application doit inclure les services Google Play. Téléchargez et installez le composant des services Google Play via SDK Manager, puis ajoutez la bibliothèque à votre projet. Pour en savoir plus, consultez le guide pour Configurer les services Google Play.
Spécifier les autorisations de l'application
Les applications dont les fonctionnalités utilisent les services de localisation doivent demander des autorisations d'accès à la localisation, selon les cas d'utilisation de ces fonctionnalités.
Créer un client de services de localisation
Dans la méthode onCreate()
de votre activité, créez une instance de client Fused Location Provider, tel qu'indiqué dans l'extrait de code suivant.
Kotlin
private lateinit var fusedLocationClient: FusedLocationProviderClient override fun onCreate(savedInstanceState: Bundle?) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) }
Java
private FusedLocationProviderClient fusedLocationClient; // .. @Override protected void onCreate(Bundle savedInstanceState) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this); }
Obtenir la dernière localisation connue
Une fois le client de services de localisation créé, vous pouvez obtenir la dernière localisation connue de l'appareil d'un utilisateur. Lorsque votre application y est connectée, vous pouvez utiliser la méthode getLastLocation()
de Fused Location Provider pour obtenir la localisation de l'appareil. La précision de la localisation renvoyée par cet appel dépend du paramètre d'autorisation que vous avez défini dans le fichier manifeste de votre application, tel qu'indiqué dans le guide expliquant la méthode pour demander des autorisations d'accès à la localisation.
Pour demander la dernière localisation connue, appelez la méthode getLastLocation()
. L'extrait de code suivant illustre la demande et le traitement simple de la réponse :
Kotlin
fusedLocationClient.lastLocation .addOnSuccessListener { location : Location? -> // Got last known location. In some rare situations this can be null. }
Java
fusedLocationClient.getLastLocation() .addOnSuccessListener(this, new OnSuccessListener<Location>() { @Override public void onSuccess(Location location) { // Got last known location. In some rare situations this can be null. if (location != null) { // Logic to handle location object } } });
La méthode getLastLocation()
renvoie une Task
que vous pouvez utiliser pour obtenir une Location
avec les coordonnées de latitude et de longitude d'un emplacement géographique. L'objet "Localisation" peut être null
dans les situations suivantes :
- La localisation est désactivée dans les paramètres de l'appareil. Le résultat peut être
null
même si la dernière localisation a déjà été récupérée, car la désactivation de la localisation efface également le cache. - L'appareil n'a jamais enregistré sa localisation. Il peut s'agir d'un nouvel appareil ou d'un appareil dont la configuration d'usine a été rétablie.
- Les services Google Play sur l'appareil ont redémarré et aucun client Fused Location Provider actif n'a demandé de localisation après le redémarrage des services. Pour éviter cette situation, vous pouvez créer un nouveau client et demander vous-même des notifications de localisation. Pour en savoir plus, consultez Recevoir des notifications de localisation.
Choisir la meilleure estimation de la localisation
FusedLocationProviderClient
propose plusieurs méthodes pour récupérer les informations de localisation de l'appareil. Choisissez l'une des options suivantes selon le cas d'utilisation de votre application :
getLastLocation()
permet d'obtenir une estimation plus rapide de la localisation et réduit l'utilisation de la batterie qui peut être attribuée à votre application. Toutefois, les informations de localisation peuvent être obsolètes si aucun autre client n'a utilisé activement la localisation récemment.getCurrentLocation()
permet d'obtenir une localisation plus récente et plus précise. Toutefois, cette méthode peut entraîner des calculs actifs de localisation sur l'appareilIl s'agit de la méthode recommandée pour obtenir une nouvelle localisation, dans la mesure du possible. Cette méthode est plus sûre que d'autres, comme le démarrage et la gestion des notifications de localisation par vous-même à l'aide de
requestLocationUpdates()
. Si votre application appellerequestLocationUpdates()
, elle peut parfois consommer beaucoup d'énergie si la localisation n'est pas disponible ou si la demande n'est pas arrêtée correctement après l'obtention d'une nouvelle localisation.
Ressources supplémentaires
Pour en savoir plus sur la récupération de la position actuelle dans Android, consultez les ressources suivantes :
Exemples
- Application exemple illustrant les bonnes pratiques lors de la récupération de la position actuelle