Current Place

Sélectionnez une plate-forme : Android iOS

Grâce au SDK Places pour Android, vous pouvez découvrir le lieu position signalée de l'appareil. Exemples de lieux : locaux des établissements, des points d'intérêt et des emplacements géographiques.

Autorisations

Pour utiliser la bibliothèque, vous n'avez pas besoin de déclarer d'autorisations supplémentaires dans le fichier manifeste de votre application. car la bibliothèque déclare toutes les autorisations qu'elle utilise dans son fichier manifeste. Toutefois, si votre application utilise PlacesClient.findCurrentPlace(), vous devez demander l'autorisation d'accéder à la position au moment de l'exécution.

Si votre application n'utilise pas PlacesClient.findCurrentPlace(), supprimez explicitement le Autorisations ACCESS_FINE_LOCATION et ACCESS_COARSE_LOCATION introduites par la bibliothèque en ajoutant le code suivant à votre fichier manifeste:

<manifest ... xmlns:tools="http://schemas.android.com/tools">
    ...
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove"/>
    ...
</manifest>

En savoir plus sur autorisations et envisagez d'utiliser EasyPermissions.

Obtenir le point géographique actuel

Pour trouver l'établissement local ou tout autre lieu où se trouve actuellement l'appareil procédez comme suit:

  1. Appeler ContextCompat.checkSelfPermission pour vérifier si l'utilisateur a autorisé l'accès à son appareil l'emplacement. Votre application doit également inclure du code pour demander l'autorisation à l'utilisateur. et de gérer le résultat. Consultez la page Demander des autorisations d'applications. pour en savoir plus.
  2. Créez un FindCurrentPlaceRequest, en transmettant une List de Place.Field, en spécifiant les types de données de lieu que votre application doit demander.
  3. Appelez PlacesClient.findCurrentPlace(), en transmettant le FindCurrentPlaceRequest que vous avez créé étape.
  4. Récupérez la liste des PlaceLikelihood à partir du FindCurrentPlaceResponse

Les champs correspondent aux résultats Place Search et sont divisés en trois catégories de facturation: Basic, Contact et Atmosphere. Les champs Basic sont facturés au tarif de base et n'entraînent frais. Les champs Contact et Atmosphere sont facturés à un tarif plus élevé. Pour plus d'informations sur la facturation des requêtes de données de lieu, consultez Utilisation et facturation :

L'API renvoie FindCurrentPlaceResponse dans un Task Le FindCurrentPlaceResponse contient une liste de PlaceLikelihood objets représentant des endroits où l'appareil est susceptible de se trouver. Pour chaque lieu, le résultat indique la probabilité qu'une est le bon endroit. La liste peut être vide s'il n'y a pas de lieu connu correspondant à l'emplacement de l'appareil donné.

Vous pouvez appeler PlaceLikelihood.getPlace() pour récupérer Place objet et PlaceLikelihood.getLikelihood() pour obtenir la note de probabilité du lieu. Plus la valeur est élevée, plus la probabilité que le lieu correspond le mieux.

L'exemple de code suivant récupère la liste des emplacements où l'appareil est les plus susceptibles de se trouver, et enregistre le nom et la probabilité de chaque lieu.

Kotlin



// Use fields to define the data types to return.
val placeFields: List<Place.Field> = listOf(Place.Field.NAME)

// Use the builder to create a FindCurrentPlaceRequest.
val request: FindCurrentPlaceRequest = FindCurrentPlaceRequest.newInstance(placeFields)

// Call findCurrentPlace and handle the response (first check that the user has granted permission).
if (ContextCompat.checkSelfPermission(this, permission.ACCESS_FINE_LOCATION) ==
    PackageManager.PERMISSION_GRANTED) {

    val placeResponse = placesClient.findCurrentPlace(request)
    placeResponse.addOnCompleteListener { task ->
        if (task.isSuccessful) {
            val response = task.result
            for (placeLikelihood: PlaceLikelihood in response?.placeLikelihoods ?: emptyList()) {
                Log.i(
                    TAG,
                    "Place '${placeLikelihood.place.name}' has likelihood: ${placeLikelihood.likelihood}"
                )
            }
        } else {
            val exception = task.exception
            if (exception is ApiException) {
                Log.e(TAG, "Place not found: ${exception.statusCode}")
            }
        }
    }
} else {
    // A local method to request required permissions;
    // See https://developer.android.com/training/permissions/requesting
    getLocationPermission()
}

      

Java


// Use fields to define the data types to return.
List<Place.Field> placeFields = Collections.singletonList(Place.Field.NAME);

// Use the builder to create a FindCurrentPlaceRequest.
FindCurrentPlaceRequest request = FindCurrentPlaceRequest.newInstance(placeFields);

// Call findCurrentPlace and handle the response (first check that the user has granted permission).
if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
    Task<FindCurrentPlaceResponse> placeResponse = placesClient.findCurrentPlace(request);
    placeResponse.addOnCompleteListener(task -> {
        if (task.isSuccessful()){
            FindCurrentPlaceResponse response = task.getResult();
            for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods()) {
                Log.i(TAG, String.format("Place '%s' has likelihood: %f",
                    placeLikelihood.getPlace().getName(),
                    placeLikelihood.getLikelihood()));
            }
        } else {
            Exception exception = task.getException();
            if (exception instanceof ApiException) {
                ApiException apiException = (ApiException) exception;
                Log.e(TAG, "Place not found: " + apiException.getStatusCode());
            }
        }
    });
} else {
    // A local method to request required permissions;
    // See https://developer.android.com/training/permissions/requesting
    getLocationPermission();
}

      

Remarques à propos des valeurs de probabilité :

  • La probabilité fournit une probabilité relative du lieu correspondant le mieux à la liste des lieux renvoyés pour une demande simple. Vous ne pouvez pas comparer les probabilités de différentes requêtes.
  • La valeur de probabilité est comprise entre 0,0 et 1,0.

Par exemple, pour représenter une probabilité de 55% que le lieu correct soit un lieu et avec une probabilité de 35% qu'il s'agisse du lieu B, la réponse compte deux membres, Lieu A avec une probabilité de 0,55 et le lieu B avec une probabilité de 0,35.

Afficher les mentions dans votre application

Lorsque votre application affiche des informations obtenues PlacesClient.findCurrentPlace(), l'application doit également afficher les mentions. Consultez la documentation sur attributions.