Android GooglePlayServicesUtil.getErrorDialog() не показывает диалог


Прежде чем использовать его, я пытаюсь проверить наличие Службы Google Play APK. у меня есть устройство, в котором пакет устарел (журнал читает "... службы Google Play устарел. Требуется 3225100, но найдено 3136134" ).
Следующий код должен обрабатывать эту ситуацию и показывать диалоговое окно с предложением пользователю выполнить обновление. По неизвестной мне причине строка

GooglePlayServicesUtil.getErrorDialog(resultCode, this,
                    PLAY_SERVICES_RESOLUTION_REQUEST).show();

возвращает немедленный показ диалога (и не блокирует поток пользовательского интерфейса на событии пользовательского интерфейса).
Не могли бы вы пролить свет на то, что возможно, и как исправить код в чтобы отобразить диалоговое окно?

@Override
protected void onResume() {
    super.onResume();

    // Check device for Play Services APK. If check succeeds, proceed with
    //  GCM registration.
    if (checkPlayServices()) {
        gcm = GoogleCloudMessaging.getInstance(this);
        regid = getRegistrationId(context);

        if (regid == null || regid.length() == 0) {
            registerInBackground();
        } else {
            this.user.setGCMRegistrationId(regid);
        }
    } else {
        Log.i(TAG, "No valid Google Play Services APK found.");
    }       
}

/**
 * Check the device to make sure it has the Google Play Services APK. If
 * it doesn't, display a dialog that allows users to download the APK from
 * the Google Play Store or enable it in the device system settings.
 */
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;
}    


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  switch (requestCode) {
    case PLAY_SERVICES_RESOLUTION_REQUEST:
      if (resultCode == RESULT_CANCELED) {
        Toast.makeText(this, "Google Play Services must be installed.",
            Toast.LENGTH_SHORT).show();
        finish();
      }
      return;
  }
  super.onActivityResult(requestCode, resultCode, data);
}    

Ответ 1

Я столкнулся с каким-то причудливым поведением с кодом, похожим на ваш, когда я неправильно использовал библиотеку Служб Google Play в своем проекте. Вам нужно импортировать в качестве проекта каталог google-play-services_lib, и вы должны включить google-play-services.jar в свой путь к классам. Причина в том, что проект содержит кучу ресурсов, в том числе необходимые для отображения соответствующего диалога для getErrorDialog().