La version 11.2.0 du SDK des services Google Play inclut un nouveau moyen d'accéder au SDK Places pour Android. Le client GoogleApi
est plus facile à utiliser que son prédécesseur (GoogleApiClient
), car il gère automatiquement les connexions aux services Google Play. Cela réduit la quantité de code récurrent dans votre application et peut aider à éliminer de nombreux pièges courants. La nouvelle API offre un certain nombre d'améliorations:
- Le processus de connexion est géré automatiquement. La nouvelle API nécessite donc moins de travail à implémenter.
- Les appels d'API attendent désormais automatiquement que la connexion au service soit établie, ce qui évite d'avoir à attendre
onConnected
avant d'envoyer des requêtes. - L'API Tasks facilite la composition d'opérations asynchrones.
- Le code est autonome et peut facilement être déplacé vers une classe utilitaire partagée ou une classe similaire.
Pour mettre à jour votre application afin qu'elle utilise le client GoogleApi
, vous devez modifier votre implémentation du SDK Places pour Android. Ce guide décrit les modifications apportées au SDK Places pour Android et recommande les étapes à suivre pour mettre à jour votre application afin qu'elle utilise le nouveau client.
Présentation
Voici les principaux axes de modification:
- Deux nouveaux points d'entrée sont disponibles:
GeoDataClient
etPlaceDetectionClient
. Au lieu de créer une instanceGoogleApiClient
pour couvrir toutes les API, votre application doit maintenant instancier à la foisGeoDataClient
etPlaceDetectionClient
. - Étant donné que les rappels de connexion ne sont plus nécessaires, vous pouvez refactoriser votre application en toute sécurité pour les supprimer.
- Les nouvelles méthodes de l'API Places sont désormais asynchrones et renvoient un
Task
au lieu d'unPendingResult
.
Charger l'API Places
Pour charger l'API Places, déclarez les points d'entrée, puis instanciez les clients dans la méthode onCreate() de votre fragment ou de votre activité, comme illustré dans l'exemple suivant:
// The entry points to the Places API.
private GeoDataClient mGeoDataClient;
private PlaceDetectionClient mPlaceDetectionClient;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Construct a GeoDataClient.
mGeoDataClient = Places.getGeoDataClient(this, null);
// Construct a PlaceDetectionClient.
mPlaceDetectionClient = Places.getPlaceDetectionClient(this, null);
Comparatif
Les nouvelles méthodes de l'API Places sont désormais asynchrones et renvoient un Task
au lieu d'un PendingResult
. Les structures de données n'ont pas changé. Votre code existant pour la gestion des résultats ne devrait donc pas avoir besoin d'être mis à jour.
Les exemples de code suivants comparent la nouvelle et l'ancienne version de GetCurrentPlace()
:
Nouvelle méthode
Task<PlaceLikelihoodBufferResponse> placeResult = mPlaceDetectionClient.getCurrentPlace(null); placeResult.addOnCompleteListener(new OnCompleteListener<PlaceLikelihoodBufferResponse>() { @Override public void onComplete(@NonNull Task<PlaceLikelihoodBufferResponse> task) { PlaceLikelihoodBufferResponse likelyPlaces = task.getResult(); for (PlaceLikelihood placeLikelihood : likelyPlaces) { Log.i(TAG, String.format("Place '%s' has likelihood: %g", placeLikelihood.getPlace().getName(), placeLikelihood.getLikelihood())); } likelyPlaces.release(); } });
Ancienne méthode
PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi .getCurrentPlace(mGoogleApiClient, null); result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() { @Override public void onResult(PlaceLikelihoodBuffer likelyPlaces) { for (PlaceLikelihood placeLikelihood : likelyPlaces) { Log.i(TAG, String.format("Place '%s' has likelihood: %g", placeLikelihood.getPlace().getName(), placeLikelihood.getLikelihood())); } likelyPlaces.release(); } });
En savoir plus
En savoir plus sur l'accès aux API Google