La release 11.2.0 dell'SDK di Google Play Services include un nuovo modo per accedere
a Places SDK for Android. Il client GoogleApi
è più facile da usare rispetto al suo predecessore (GoogleApiClient
), poiché gestisce automaticamente le connessioni a Google Play Services. Questo riduce la quantità di codice boilerplate nell'app e può aiutarti a eliminare molti errori comuni. La nuova API offre una serie di miglioramenti:
- Il processo di connessione viene gestito automaticamente, pertanto la nuova API richiede meno lavoro da implementare.
- Le chiamate API ora attendono automaticamente che la connessione al servizio venga stabilita, eliminando la necessità di attendere
onConnected
prima di effettuare le richieste. - L'API Tasks semplifica la scrittura di operazioni asincrone.
- Il codice è indipendente e può essere facilmente spostato in una classe di utilità condivisa o simile.
L'aggiornamento dell'app per l'utilizzo del client GoogleApi
richiede alcune modifiche all'implementazione dell'SDK Places per Android. Questa guida descrive le modifiche all'SDK Places per Android e consiglia i passaggi da seguire per aggiornare l'app per utilizzare il nuovo client.
Panoramica
Le principali aree di cambiamento sono le seguenti:
- Ci sono due nuovi punti di accesso:
GeoDataClient
ePlaceDetectionClient
. Anziché creare un'istanzaGoogleApiClient
per coprire tutte le API, la tua app deve ora creare un'istanza diGeoDataClient
ePlaceDetectionClient
. - Poiché i callback di connessione non sono più necessari, puoi tranquillamente ridefinire la tua app per rimuoverli.
- I nuovi metodi dell'API Places ora sono asincroni e restituiscono
Task
anzichéPendingResult
.
Carica l'API Places
Per caricare l'API Places, dichiara i punti di ingresso, quindi crea un'istanza dei client nel metodo onCreate() del frammento o dell'attività come mostrato nell'esempio seguente:
// 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);
Confronto
I nuovi metodi dell'API Places ora sono asincroni e restituiscono Task
anziché PendingResult
. Le strutture dei dati non sono
cambiate, pertanto il codice esistente per la gestione dei risultati non dovrebbe essere aggiornato.
I seguenti esempi di codice confrontano la nuova e la vecchia versione di GetCurrentPlace()
:
Il nuovo modo
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(); } });
Alla vecchia maniera
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(); } });
Scopri di più
Scopri di più sull'accesso alle API di Google.