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. Dadurch wird die Menge an Boilerplate-Code in Ihrer App reduziert und viele häufige Fehlerquellen können vermieden werden. Die neue API bietet eine Reihe von Verbesserungen:
- Der Verbindungsprozess wird automatisch verwaltet, sodass die neue API weniger Aufwand bei der Implementierung erfordert.
- Bei API-Aufrufen wird jetzt automatisch gewartet, bis die Dienstverbindung hergestellt ist. Sie müssen also nicht mehr auf
onConnectedwarten, 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 Utility-Klasse oder Ähnliches verschoben werden.
Wenn Sie Ihre App so aktualisieren, dass der GoogleApi-Client verwendet wird, sind einige Änderungen an Ihrer Places SDK for Android-Implementierung erforderlich. In diesem Leitfaden werden die Änderungen am Places SDK for Android beschrieben. Außerdem werden Schritte empfohlen, die Sie beim Aktualisieren Ihrer App zur Verwendung des neuen Clients ausführen sollten.
Übersicht
Die wichtigsten Änderungen sind:
- Es gibt zwei neue Einstiegspunkte:
GeoDataClientundPlaceDetectionClient. Anstatt eineGoogleApiClient-Instanz für alle APIs zu erstellen, muss Ihre App jetzt sowohlGeoDataClientals auchPlaceDetectionClientinstanziieren. - Da Verbindungs-Callbacks nicht mehr erforderlich sind, können Sie Ihre App problemlos umgestalten, um sie zu entfernen.
- Die neuen Places API-Methoden sind jetzt asynchron und geben
TaskstattPendingResultzurü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 muss Ihr vorhandener Code für die Verarbeitung von Ergebnissen nicht aktualisiert werden.
In den folgenden Codebeispielen werden die neuen und früheren Versionen von GetCurrentPlace() verglichen:
Jetzt
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(); } });
Die alte 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