Android GooglePlayServicesUtil.getErrorDialog () no muestra el cuadro de diálogo


Estoy tratando de verificar la disponibilidad deGoogle Play Services APK antes de usarlo. Tengo un dispositivo donde el paquete está desactualizado (el registro dice "... Los servicios de Google Play están desactualizados. Requiere 3225100 pero encontrado 3136134").
El código siguiente manejará esta situación y mostrará un cuadro de diálogo que le pedirá al usuario que realice la actualización. Por una razón desconocida para mí la línea

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

Vuelve inmediatamente sin mostrar ningún diálogo. (y no bloquear el subproceso de la interfaz de usuario en un evento de interfaz de usuario).
¿Podría por favor arrojar una luz de lo que está pasando y cómo rectificar el código para que se muestre el diálogo?

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta