Die Version 11.2.0 des Google Play Services SDK bietet eine neue Möglichkeit, auf das Places SDK for Android zuzugreifen. Der GoogleApi
-Client ist einfacher zu verwenden als sein Vorgänger (GoogleApiClient
), da er Verbindungen zu Google Play-Diensten automatisch verwaltet. So wird der Boilerplate-Code in Ihrer App reduziert und viele häufige Fallstricke können vermieden werden. Die neue API bietet eine Reihe von Verbesserungen:
- Die Verbindung wird automatisch verwaltet, sodass die Implementierung der neuen API weniger Aufwand erfordert.
- Bei API-Aufrufen wird jetzt automatisch auf die Herstellung der Dienstverbindung gewartet. Sie müssen also nicht mehr auf
onConnected
warten, bevor Sie Anfragen senden. - Mit der Tasks API lassen sich asynchrone Vorgänge einfacher zusammenstellen.
- Der Code ist in sich geschlossen und kann in eine gemeinsame Dienstklasse oder ähnliches verschoben werden.
Wenn Sie Ihre App auf den GoogleApi
-Client umstellen möchten, müssen Sie einige Änderungen an Ihrer Places SDK for Android-Implementierung vornehmen. In diesem Leitfaden werden die Änderungen am Places SDK for Android beschrieben und empfohlene Schritte zur Aktualisierung Ihrer App auf den neuen Client aufgeführt.
Übersicht
Die wichtigsten Änderungen sind:
- Es gibt zwei neue Einstiegspunkte:
GeoDataClient
undPlaceDetectionClient
. Anstatt eineGoogleApiClient
-Instanz für alle APIs zu erstellen, muss Ihre App jetzt sowohlGeoDataClient
als auchPlaceDetectionClient
instanziieren. - Da Verbindungs-Callbacks nicht mehr erforderlich sind, können Sie Ihre App sicher umstrukturieren, um sie zu entfernen.
- Die neuen Places API-Methoden sind jetzt asynchron und geben
Task
stattPendingResult
zurück.
Places API laden
Um die Places API zu laden, deklarieren Sie die Einstiegspunkte und instanziieren Sie dann die Clients in der Methode onCreate() Ihres Fragments oder Ihrer Aktivität, wie im folgenden Beispiel gezeigt:
// 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);
Vergleich
Die neuen Places API-Methoden sind jetzt asynchron und geben Task
statt PendingResult
zurück. Die Datenstrukturen haben sich nicht geändert. Daher sollte Ihr vorhandener Code zum Umgang mit Ergebnissen nicht aktualisiert werden müssen.
In den folgenden Codebeispielen werden die neue und die ältere Version von GetCurrentPlace()
verglichen:
Die neue Methode
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(); } });
Bisherige Methode
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(); } });
Weitere Informationen
Weitere Informationen zum Zugriff auf Google APIs