2013-09-30 4 views
9


Sto cercando di verificare la disponibilità di Google Play Services APK prima di usarlo. Ho un dispositivo in cui il pacchetto non è aggiornato (il registro dice "... Servizi Google Play non aggiornati. Richiede 3225100 ma trovato 3136134").
Il codice seguente deve gestire questa situazione e mostrare una finestra di dialogo che richiede all'utente di eseguire l'aggiornamento. Per un motivo a me sconosciuto lineaAndroid GooglePlayServicesUtil.getErrorDialog() non mostra la finestra di

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

ritorna immediatamente mostrano alcuna finestra (e non bloccare il thread UI su un evento UI).
Potrebbe per favore chiarire cosa è possibile seguire e come correggere il codice per visualizzare la finestra di dialogo?

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

risposta

0

Ho riscontrato un comportamento bizzarro con codice simile al tuo quando includevo la raccolta di servizi di Google Play in modo non corretto nel mio progetto. Devi importare come un progetto il google-play-services_lib directory e devi includere google-play-services.jar nel classpath. Il motivo è che il progetto contiene un sacco di risorse comprese quelle necessarie per visualizzare la finestra di dialogo appropriata per getErrorDialog().

+0

Ho fatto entrambe queste cose e 'getErrorDialog' non fa ancora nulla. – theblang

+0

Finalmente ha fatto come suggerito e il problema è andato via. Grazie per il suggerimento. – quirkfly

+0

Continuo a vedere gli stessi problemi. È possibile esportare la libreria? Funziona nell'emulatore anche se – Jorge