Wersja 11.2.0 pakietu SDK Usług Google Play zawiera nowy sposób uzyskiwania dostępu do pakietu SDK Miejsc Google na Androida. Klient GoogleApi jest łatwiejszy w użyciu niż jego poprzednik (GoogleApiClient), ponieważ automatycznie zarządza połączeniami z usługami Google Play. Zmniejsza to ilość kodu standardowego w aplikacji i może pomóc uniknąć wielu typowych problemów. Nowy interfejs API
ma kilka ulepszeń:
- Proces łączenia jest zarządzany automatycznie, więc wdrożenie nowego interfejsu API wymaga mniej pracy.
- Wywołania API automatycznie czekają teraz na nawiązanie połączenia z usługą, co eliminuje konieczność oczekiwania na
onConnectedprzed wysłaniem żądań. - Interfejs Tasks API ułatwia tworzenie operacji asynchronicznych.
- Kod jest samodzielny i można go przenieść do udostępnionej klasy narzędziowej lub podobnej.
Aktualizacja aplikacji, aby korzystała z GoogleApi, wymaga wprowadzenia pewnych zmian w implementacji pakietu SDK Miejsc Google na Androida. Ten przewodnik opisuje zmiany w pakiecie Places SDK na Androida i zawiera zalecenia dotyczące aktualizacji aplikacji, aby korzystała z nowego klienta.
Przegląd
Główne obszary zmian to:
- Dostępne są 2 nowe punkty wejścia:
GeoDataClientiPlaceDetectionClient. Zamiast tworzyć 1 instancjęGoogleApiClientobejmującą wszystkie interfejsy API, aplikacja musi teraz tworzyć instancjeGeoDataClientiPlaceDetectionClient. - Wywołania zwrotne połączenia nie są już wymagane, więc możesz bezpiecznie zmodyfikować aplikację, aby je usunąć.
- Nowe metody interfejsu Places API są teraz asynchroniczne i zwracają wartość
TaskzamiastPendingResult.
Wczytywanie interfejsu Places API
Aby wczytać interfejs Places API, zadeklaruj punkty wejścia, a następnie utwórz instancje klientów w metodzie onCreate() fragmentu lub aktywności, jak pokazano w tym przykładzie:
// 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);
Porównanie
Nowe metody interfejsu Places API są teraz asynchroniczne i zwracają wartość Task zamiast PendingResult. Struktury danych nie uległy zmianie, więc istniejący kod do obsługi wyników nie powinien wymagać aktualizacji.
Poniższe przykłady kodu porównują nowe i wcześniejsze wersje GetCurrentPlace():
Nowy sposób
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(); } });
Stary sposób
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(); } });
Więcej informacji
Dowiedz się więcej o uzyskiwaniu dostępu do interfejsów API Google.