Próbuję skorzystać z usługi Google Play w mojej aplikacji na Androida. Jak mówi dokument Google, przed użyciem musimy sprawdzić, czy Google API jest dostępne. Szukałem jakiegoś sposobu, żeby to sprawdzić. Oto co mam:
private boolean checkPlayServices() {
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (resultCode != ConnectionResult.SUCCESS) {
if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
GooglePlayServicesUtil.getErrorDialog(resultCode, this,
PLAY_SERVICES_RESOLUTION_REQUEST).show();
} else {
Log.i(TAG, "This device is not supported.");
finish();
}
return false;
}
return true;
}
Ale kiedy przechodzę do strony Google Api GooglePlayServicesUtil, https://developers.google.com/android/reference/com/google/android/gms/common/GooglePlayServicesUtil
Uważam, że wszystkie funkcje są przestarzałe . Na przykład metoda
GooglePlayServicesUtil.isGooglePlayServicesAvailable (wycofane)
A Google zaleca użycie:
GoogleApiAvailability.isGooglePlayServicesAvailable .
Jednak podczas próby skorzystania z GoogleApiAvailability.isGooglePlayServicesAvailable pojawia się komunikat o błędzie:
GooglePlayServicesUtil
zniknęła (co wydaje się złą praktyką w przypadku „drobnej” aktualizacji), ale nieGoogleApiAvailability
zamierzam używać go jako zamiennika.Odpowiedzi:
Znalazłem rozwiązanie. W
GoogleApiAvailability
metodzie wszystkie metody są metodami publicznymi, podczas gdy weGooglePlayServicesUtil
wszystkich metodach są to statyczne funkcje publiczne.Aby skorzystać z GoogleApiAvailability, należy:
źródło
private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
Nie należy już używać klasy GooglePlayServicesUtil !
Oto jak można zamiast tego użyć klasy GoogleApiAvailability - gdy np. Potrzebny jest GCM (lub dowolna inna usługa Google):
AKTUALIZACJA:
REQUEST_GOOGLE_PLAY_SERVICES
jest stałą całkowitą o dowolnej nazwie i wartości, do których można się odwołać wonActivityResult()
metodzie.Również wywołanie
this.onActivityResult()
powyższego kodu jest w porządku (dzwonisz równieżsuper.onActivityResult()
w innym miejscu).źródło
GOOGLE_PLAY_SERVICES_PACKAGE
stałą z klasy GoogleApiAvailability, to sposób Google na poinformowanie Cię: nie używajGooglePlayServicesUtil
już tej klasy.GoogleApiAvailability
klasa nie istnieje? Jeśli odwołujemy się do klasy statycznie, nawet wewnątrz wyrażenia warunkowego, czy nie spowoduje to awarii aplikacji?GoogleApiAvailability
jest częścią biblioteki klienta. Więc jego kod jest wkompilowany w aplikację => Nie martw się o to.Zamiast tego będziesz musiał użyć GoogleApiAvailability :
this
reprezentujecontext
.źródło
źródło
Dodałem to jako zabawę w klasie BaseActivity do wykorzystania we wszystkich miejscach
użyj tego w ten sposób
Lub możesz go dostosować, jak chcesz.
źródło