Zum GoogleApi-Client migrieren

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 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 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: GeoDataClient und PlaceDetectionClient. Anstatt eine GoogleApiClient-Instanz für alle APIs zu erstellen, muss Ihre App jetzt sowohl GeoDataClient als auch PlaceDetectionClient instanziieren.
  • 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 Task anstelle eines PendingResult 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 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.