Pakiet SDK Usług Google Play w wersji 11.2.0 zapewnia nowy sposób dostępu do pakietu Places SDK 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 w aplikacji i pomaga wyeliminować wiele najczęstszych błędów. Nowy interfejs API ma szereg ulepszeń:
- Proces łączenia jest zarządzany automatycznie, więc wdrożenie nowego interfejsu API zajmuje mniej czasu.
- Wywołania interfejsu API teraz automatycznie czekają na nawiązanie połączenia z usługą, dzięki czemu nie trzeba czekać na
onConnected
przed wysłaniem żądań. - Interfejs Tasks API ułatwia tworzenie operacji asynchronicznych.
- Kod jest samodzielny i można go łatwo przenieść do udostępnionej klasy narzędzia lub podobnego.
Aby korzystać z klienta GoogleApi
, trzeba wprowadzić pewne zmiany w implementacji pakietu SDK Miejsc na Androida. W tym przewodniku opisujemy zmiany w pakiecie Miejsca SDK na Androida oraz podpowiadamy, co zrobić przy aktualizowaniu aplikacji, by używała nowego klienta.
Przegląd
Oto główne obszary zmian:
- Występują 2 nowe punkty wejścia:
GeoDataClient
iPlaceDetectionClient
. Zamiast tworzyć 1 instancjęGoogleApiClient
do obsługi wszystkich interfejsów API, Twoja aplikacja musi teraz tworzyć wystąpienia zarównoGeoDataClient
, jak iPlaceDetectionClient
. - Ponieważ wywołania zwrotne połączenia nie są już wymagane, możesz bezpiecznie refaktoryzować aplikację, aby je usunąć.
- Nowe metody interfejsu Places API są teraz asynchroniczne i zwracają metodę
Task
zamiastPendingResult
.
Wczytywanie interfejsu Places API
Aby wczytać interfejs Places API, zadeklaruj punkty wejścia, a następnie utwórz instancję klientów w metodzie onCreate() fragmentu lub działania, jak 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ą metodę Task
zamiast PendingResult
. Struktury danych nie uległy zmianie, więc obecny kod do obsługi wyników nie powinien wymagać aktualizacji.
Poniższe przykłady kodu porównują nową i starą wersję 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 dostępie do interfejsów API Google.