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
onConnectedantes 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:
GeoDataClientyPlaceDetectionClient. En lugar de crear una instancia deGoogleApiClientpara abarcar todas las APIs, tu app ahora debe crear instancias deGeoDataClientyPlaceDetectionClient. - 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
Tasken lugar de un objetoPendingResult.
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.