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:
- 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. - Créez un
FindCurrentPlaceRequest
, en transmettant uneList
dePlace.Field
, en spécifiant les types de données de lieu que votre application doit demander. - Appelez
PlacesClient.findCurrentPlace()
, en transmettant leFindCurrentPlaceRequest
que vous avez créé étape. - Récupérez la liste des
PlaceLikelihood
à partir duFindCurrentPlaceResponse
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.