GooglePlayServicesUtil против GoogleApiAvailability
Я пытаюсь использовать Службу Google Play в своем приложении для Android. Как говорится в документе Google, нам нужно проверить, доступен ли Google API перед его использованием. Я искал способ проверить это. Вот что я получил:
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;
}
Но когда я перехожу на страницу Google Api GooglePlayServicesUtil,
https://developers.google.com/android/reference/com/google/android/gms/common/GooglePlayServicesUtil
Я нахожу, что все функции устарели. Например, метод
GooglePlayServicesUtil.isGooglePlayServicesAvailable(устаревший)
И Google рекомендует использовать:
GoogleApiAvailability.isGooglePlayServicesAvailable.
Однако, когда я пытаюсь использовать GoogleApiAvailability.isGooglePlayServicesAvailable, я получаю сообщение об ошибке:
![enter image description here]()
Ответы
Ответ 1
Я нашел решение. В GoogleApiAvailability
все методы являются общедоступным методом, а в GooglePlayServicesUtil
все методы являются статической публичной функцией.
Итак, чтобы использовать GoogleApiAvailability, правильный путь:
private boolean checkPlayServices() {
GoogleApiAvailability googleAPI = GoogleApiAvailability.getInstance();
int result = googleAPI.isGooglePlayServicesAvailable(this);
if(result != ConnectionResult.SUCCESS) {
if(googleAPI.isUserResolvableError(result)) {
googleAPI.getErrorDialog(this, result,
PLAY_SERVICES_RESOLUTION_REQUEST).show();
}
return false;
}
return true;
}
Ответ 2
Класс GooglePlayServicesUtil больше не должен использоваться!
Вот как можно использовать класс GoogleApiAvailability - когда требуется, например, GCM (или любая другая служба Google):
public static final int REQUEST_GOOGLE_PLAY_SERVICES = 1972;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
startRegistrationService();
}
}
private void startRegistrationService() {
GoogleApiAvailability api = GoogleApiAvailability.getInstance();
int code = api.isGooglePlayServicesAvailable(this);
if (code == ConnectionResult.SUCCESS) {
onActivityResult(REQUEST_GOOGLE_PLAY_SERVICES, Activity.RESULT_OK, null);
} else if (api.isUserResolvableError(code) &&
api.showErrorDialogFragment(this, code, REQUEST_GOOGLE_PLAY_SERVICES)) {
// wait for onActivityResult call (see below)
} else {
Toast.makeText(this, api.getErrorString(code), Toast.LENGTH_LONG).show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode) {
case REQUEST_GOOGLE_PLAY_SERVICES:
if (resultCode == Activity.RESULT_OK) {
Intent i = new Intent(this, RegistrationService.class);
startService(i); // OK, init GCM
}
break;
default:
super.onActivityResult(requestCode, resultCode, data);
}
}
UPDATE:
REQUEST_GOOGLE_PLAY_SERVICES
- целочисленная константа с произвольным именем и значением, которое можно отнести к методу onActivityResult()
.
Кроме того, вызов this.onActivityResult()
в приведенном выше коде в порядке (вы также вызываете super.onActivityResult()
в другом месте).
Ответ 3
Вместо этого вам нужно будет использовать GoogleApiAvailability:
GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance();
int errorCode = googleApiAvailability.isGooglePlayServicesAvailable(this);
this
представляет context
.
Ответ 4
Проверьте устройство, чтобы убедиться, что он имеет APK сервисов Google Play. Если он не отображает диалоговое окно, которое позволяет пользователям загружать APK из магазина Google Play или включить его в системе устройства настройки.
public static boolean checkPlayServices(Activity activity) {
final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
int resultCode = apiAvailability.isGooglePlayServicesAvailable(activity);
if (resultCode != ConnectionResult.SUCCESS) {
if (apiAvailability.isUserResolvableError(resultCode)) {
apiAvailability.getErrorDialog(activity, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST)
.show();
} else {
Logger.logE(TAG, "This device is not supported.");
}
return false;
}
return true;
}