Migra al cliente de GoogleApi

La versión 11.2.0 del SDK de Servicios de Google Play incluye una nueva forma de acceder al SDK de Places para Android. El cliente GoogleApi es más fácil de usar que su predecesor (GoogleApiClient), ya que administra automáticamente las conexiones a los Servicios de Google Play. Esto reduce la cantidad de código estándar en tu app y puede ayudar a eliminar muchos errores comunes. La nueva API ofrece varias mejoras:

  • El proceso de conexión se administra automáticamente, por lo que la nueva API requiere menos trabajo para implementarse.
  • Las llamadas a la API ahora esperan automáticamente a que se establezca la conexión de servicio, lo que elimina la necesidad de esperar a onConnected antes de realizar solicitudes.
  • La Tasks API facilita la composición de operaciones asíncronas.
  • El código es autónomo y se puede trasladar a una clase de utilidad compartida o similar.

Actualizar tu app para usar el cliente GoogleApi requiere algunos cambios en la implementación del SDK de Places para Android. En esta guía, se describen los cambios en el SDK de Places para Android y se recomiendan los pasos que debes seguir cuando actualices tu app para usar el nuevo cliente.

Descripción general

Las principales áreas de cambio son las siguientes:

  • Hay dos nuevos puntos de entrada: GeoDataClient y PlaceDetectionClient. En lugar de crear una instancia de GoogleApiClient para abarcar todas las APIs, tu app ahora debe crear instancias de GeoDataClient y PlaceDetectionClient.
  • Dado que ya no se requieren devoluciones de llamadas de conexión, puedes refactorizar tu app de forma segura para quitarlas.
  • Los nuevos métodos de la API de Places ahora son asíncronos y devuelven un objeto Task en lugar de un objeto PendingResult.

Carga la API de Places

Para cargar la API de Places, declara los puntos de entrada y, luego, crea instancias de los clientes en el método onCreate() de tu fragmento o actividad, como se muestra en el siguiente ejemplo:

// 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);

Comparación

Los nuevos métodos de la API de Places ahora son asíncronos y devuelven un objeto Task en lugar de un objeto PendingResult. Las estructuras de datos no cambiaron, por lo que no deberías tener que actualizar el código existente para controlar los resultados. En los siguientes ejemplos de código, se comparan las versiones nueva y anterior de GetCurrentPlace():

Método nuevo

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();
    }
});

Método anterior

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();
  }
});

Más información

Obtén más información para acceder a las APIs de Google.