Obtenir la dernière localisation connue

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

À 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 les 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'appareil

    Il 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 appelle requestLocationUpdates(), elle peut parfois se révéler très énergivore si la localisation n'est pas disponible ou si la demande n'est pas arrêtée correctement après avoir obtenu une nouvelle localisation.