Zum GoogleApi-Client migrieren

Die Version 11.2.0 des Google Play Services SDK bietet eine neue Möglichkeit für den Zugriff auf das Places SDK for Android. Der GoogleApi-Client ist einfacher zu verwenden als sein Vorgänger (GoogleApiClient), da er Verbindungen zu Google Play-Diensten automatisch verwaltet. Dies reduziert die Menge an Boilerplate-Code in Ihrer Anwendung und kann dazu beitragen, viele häufige Probleme zu beseitigen. Die neue API bietet eine Reihe von Verbesserungen:

  • Der Verbindungsvorgang wird automatisch verwaltet, sodass die Implementierung der neuen API weniger aufwendig ist.
  • API-Aufrufe warten jetzt automatisch, bis die Dienstverbindung hergestellt ist. Es ist nicht mehr nötig, mit Anfragen auf onConnected zu warten.
  • Die Tasks API erleichtert das Erstellen asynchroner Vorgänge.
  • Der Code ist in sich geschlossen und kann einfach in eine gemeinsam genutzte Dienstprogrammklasse oder eine ähnliche Klasse verschoben werden.

Damit deine App mit dem GoogleApi-Client aktualisiert werden kann, sind einige Änderungen an der Implementierung des Places SDK for Android erforderlich. In diesem Leitfaden werden die Änderungen am Places SDK for Android beschrieben. Außerdem werden Schritte empfohlen, die Sie ausführen sollten, wenn Sie Ihre App auf den neuen Client aktualisieren.

Überblick

Die Hauptä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 Verbindungs-Callbacks nicht mehr erforderlich sind, können Sie Ihre Anwendung bedenkenlos refaktorieren, um sie zu entfernen.
  • Die neuen Places API-Methoden sind jetzt asynchron und geben anstelle von PendingResult ein Task zurück.

Places API laden

Deklarieren Sie zum Laden der Places API die Einstiegspunkte und instanziieren Sie die Clients in der Methode onCreate() des Fragments oder der 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 anstelle von PendingResult ein Task zurück. Die Datenstrukturen haben sich nicht geändert, sodass Ihr vorhandener Code zur Verarbeitung der Ergebnisse nicht aktualisiert werden muss. In den folgenden Codebeispielen werden die neue und die alte Version von GetCurrentPlace() verglichen:

Die neue Art,

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