La version 11.2.0 du SDK des services Google Play inclut une nouvelle façon 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 passe-partout dans votre application et peut vous aider à éviter de nombreux pièges courants. La nouvelle API offre plusieurs améliorations :
- Le processus de connexion est géré automatiquement. L'implémentation de la nouvelle API est donc plus simple.
- Les appels d'API attendent désormais automatiquement que la connexion au service soit établie, ce qui évite d'avoir à attendre
onConnectedavant d'effectuer des requêtes. - L'API Tasks facilite la composition d'opérations asynchrones.
- Le code est autonome et peut être déplacé dans une classe utilitaire partagée ou similaire.
Pour mettre à jour votre application afin d'utiliser le client GoogleApi, vous devez apporter quelques modifications à 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 lorsque vous mettez à jour votre application pour utiliser le nouveau client.
Présentation
Les principales modifications sont les suivantes :
- Il existe deux nouveaux points d'entrée :
GeoDataClientetPlaceDetectionClient. Au lieu de créer une instanceGoogleApiClientpour couvrir toutes les API, votre application doit désormais instancierGeoDataClientetPlaceDetectionClient. - Les rappels de connexion n'étant 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 une
Taskplutôt qu'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);
Comparaison
Les nouvelles méthodes de l'API Places sont désormais asynchrones et renvoient une Task plutôt qu'un PendingResult. Les structures de données n'ont pas changé. Vous ne devriez donc pas avoir besoin de mettre à jour le code existant pour gérer les résultats.
Les exemples de code suivants comparent les versions nouvelle et antérieure 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.