Die Version 11.2.0 des Google Play-Dienste 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.
- API-Aufrufe warten jetzt automatisch, bis die Dienstverbindung hergestellt ist. So müssen Sie 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 möchten, dass sie den GoogleApi-Client verwendet, müssen Sie einige Änderungen an der Implementierung des Places SDK for Android vornehmen. In diesem Leitfaden werden die Änderungen am Places SDK for Android beschrieben und Schritte empfohlen, die Sie beim Aktualisieren Ihrer App zur Verwendung des neuen Clients ausführen sollten.
Übersicht
Die wichtigsten Änderungen sind folgende:
- Es gibt zwei neue Einstiegspunkte:
GeoDataClientundPlaceDetectionClient. Anstatt eineGoogleApiClient-Instanz für alle APIs zu erstellen, muss Ihre App jetzt sowohlGeoDataClientals auchPlaceDetectionClientinstanziieren. - Da keine Verbindungs-Callbacks mehr erforderlich sind, können Sie Ihre App sicher umgestalten, um sie zu entfernen.
- Die neuen Places API-Methoden sind jetzt asynchron und geben ein
Taskanstelle einesPendingResultzurü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 ein Task anstelle eines PendingResult zurück. Die Datenstrukturen haben sich nicht geändert. Daher muss Ihr vorhandener Code zur Verarbeitung von Ergebnissen nicht aktualisiert werden.
In den folgenden Codebeispielen werden die neue und die frühere Version 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(); } });
Früher
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.