Migrer vers le client GoogleApi

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 onConnected avant 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 : GeoDataClient et PlaceDetectionClient. Au lieu de créer une instance GoogleApiClient pour couvrir toutes les API, votre application doit désormais instancier GeoDataClient et PlaceDetectionClient.
  • 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 Task plutôt qu'un PendingResult.

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.