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. Cette nouvelle API présente plusieurs avantages :
- Le processus de connexion étant géré automatiquement, la nouvelle API est plus facile à implémenter.
- Les appels d'API attendent désormais automatiquement que la connexion de service soit établie, ce qui évite d'attendre
onConnectedavant d'envoyer des requêtes. - L'API Tasks facilite la composition des opérations asynchrones.
- Le code est autonome et peut être déplacé dans une classe d'utilitaires partagée ou similaire.
Pour mettre à jour votre application afin qu'elle utilise 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 lors de la mise à jour de votre application pour utiliser le nouveau client.
Présentation
Voici les principaux domaines concernés par les modifications :
- Deux nouveaux points d'entrée sont disponibles :
GeoDataClientetPlaceDetectionClient. Au lieu de créer une instanceGoogleApiClientpour couvrir toutes les API, votre application doit désormais instancierGeoDataClientetPlaceDetectionClient. - É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
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 un 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 votre code existant pour gérer les résultats.
Les exemples de code suivants comparent les nouvelles et anciennes versions de GetCurrentPlace() :
La 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