Android GooglePlayServicesUtil.getErrorDialog () zeigt den Dialog nicht an


Ich versuche die Verfügbarkeit von zu überprüfenGoogle Play Services APK vor der Verwendung. Ich habe ein Gerät, auf dem das Paket nicht mehr aktuell ist (das Protokoll lautet "... Google Play-Dienste veraltet. Benötigt 3225100, aber gefunden 3136134").
Der folgende Code soll diese Situation behandeln und einen Dialog anzeigen, der den Benutzer auffordert, die Aktualisierung durchzuführen. Aus einem mir unbekannten Grund die Leitung

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

kehrt sofort zurück und zeigt keinen Dialog an (und den UI-Thread bei einem UI-Ereignis nicht blockieren).
Könnten Sie bitte einen Blick darauf werfen, was möglich ist und wie der Code korrigiert werden kann, damit der Dialog angezeigt wird?

@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's 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);
}    

Antworten auf die Frage(1)

Ihre Antwort auf die Frage