Zum GoogleApi-Client migrieren

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 und PlaceDetectionClient. Anstatt eine GoogleApiClient-Instanz für alle APIs zu erstellen, muss Ihre App jetzt sowohl GeoDataClient als auch PlaceDetectionClient 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 statt 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 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