La versione di Play Services sul tuo emulatore non supporta 9.2.0. Al momento, non credo che nessuna delle immagini dell'emulatore supporti 9.2.0. Le opzioni disponibili sono il downgrade alla 9.0.2 o l'esecuzione su un dispositivo reale finché non viene rilasciata un'immagine dell'emulatore aggiornata.
Se si guarda con attenzione alla vostra uscita logcat si dovrebbe vedere un messaggio come questo:
W/GooglePlayServicesUtil: Google Play services out of date. Requires 9256000 but found 9080030
si può vedere il numero di versione GPS l'emulatore sta usando andando in Impostazioni/Applicazioni, trovando Google Play Services, e toccandolo per ottenere le informazioni sull'app.
È possibile ottenere il numero di versione GPS dal codice chiamando GoogleApiAvalability.GOOGLE_PLAY_SERVICES_VERSION_CODE.
This answer contiene alcune informazioni correlate sulle versioni dell'emulatore.
Aggiornamento per questioni di Adrian Cretu per quanto riguarda dispositivi reali
miei esperimenti indicano che è possibile per un'applicazione Fusioni in esecuzione su un dispositivo reale per rilevare una vecchia versione di Play Services e di avviare l'elaborazione risoluzione. Ho sperimentato l'app di esempio CastVideos. La mia soluzione potrebbe non essere la migliore, ma dimostra il concetto. Ho creato una nuova attività che viene eseguita al momento del lancio e controlla la disponibilità di Play Services. Ho cambiato il manifesto per rendere questa attività l'attività lanciatore invece di VideoBrowserActivity
:
public class InitActivity extends AppCompatActivity {
private static final String TAG = "InitActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GoogleApiAvailability googAvail = GoogleApiAvailability.getInstance();
int status = googAvail.isGooglePlayServicesAvailable(this);
Log.i(TAG, "onCreate: Status= " + googAvail.getErrorString(status));
googAvail.makeGooglePlayServicesAvailable(this)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.i(TAG, "onComplete: Done");
if (task.isSuccessful()) {
Log.i(TAG, "onComplete: Starting VideoBrowser");
startActivity(new Intent(InitActivity.this, VideoBrowserActivity.class));
finish();
} else {
Log.e(TAG, "onComplete: RESOLUTION FAILED");
}
}
});
}
}
Se Play Services è presente, fino ad oggi, e hanno consentito, il compito che controlla la disponibilità completa immediatamente e inizia VideoBrowserActivity
, il lancio originale attività. In caso contrario, viene visualizzata una finestra di dialogo che comunica all'utente che i Servizi di riproduzione devono essere aggiornati e, dopo che l'utente ha accettato, il Play Store viene aperto e l'utente può avviare il download della versione più recente.
Non è stato possibile trovare un modo per passare in modo pulito allo VideoBrowserActivity
. Ho dovuto riavviare l'app. Con più lavoro, penso che sia possibile un recupero pulito da servizi di gioco scaduti. Almeno qualcosa di meglio di un arresto anomalo dell'app.
Ho ricevuto il messaggio di errore che "Nessun modulo accettabile trovato. La versione locale è 0 e la versione remota è 0", aggiungo permessi run-time e problema risolto. –