La release 11.2.0 dell'SDK Google Play Services include un nuovo modo per accedere all'SDK Places per Android. Il client GoogleApi
è più facile da usare rispetto al suo predecessore (GoogleApiClient
), poiché gestisce automaticamente le connessioni ai servizi Google Play. In questo modo riduci la quantità di codice boilerplate
nella tua app e puoi contribuire a eliminare molti problemi comuni. La nuova API offre una serie di miglioramenti:
- La procedura di connessione viene gestita automaticamente, quindi la nuova API richiede meno lavoro per l'implementazione.
- Le chiamate API ora aspettano automaticamente che venga stabilita la connessione al servizio, eliminando la necessità di attendere
onConnected
prima di effettuare richieste. - L'API Tasks semplifica la composizione delle operazioni asincrone.
- Il codice è autonomo e può essere spostato in un classe di utilità condivisa o simile.
L'aggiornamento dell'app per l'utilizzo del client GoogleApi
richiede alcune modifiche all'implementazione di SDK di Places per Android. Questa guida descrive le modifiche apportate all'SDK Places per Android e consiglia i passaggi da seguire per aggiornare l'app in modo da utilizzare il nuovo client.
Panoramica
Le principali aree di cambiamento sono le seguenti:
- Esistono due nuovi punti di contatto:
GeoDataClient
ePlaceDetectionClient
. Invece di creare un'istanza diGoogleApiClient
per coprire tutte le API, ora la tua app deve creare istanze sia diGoogleApiClient
sia diPlaceDetectionClient
.GeoDataClient
- Poiché i callback di connessione non sono più richiesti, puoi eseguire il refactoring della tua app in modo sicuro per rimuoverli.
- I nuovi metodi dell'API Places sono ora asincroni e restituiscono un
Task
anziché unPendingResult
.
Carica l'API Places
Per caricare l'API Places, dichiara i punti di accesso, quindi crea istanze 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 sono ora asincroni e restituiscono un Task
anziché un PendingResult
. Le strutture di dati non sono
cambiate, pertanto il codice esistente per la gestione dei risultati non dovrebbe richiedere aggiornamenti.
I seguenti esempi di codice confrontano le versioni nuove e precedenti 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(); } });
Il vecchio metodo
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.