2016-07-07 14 views
7

Ho recentemente aggiornato a com.google.android.gms: play-services 9.2.0 e sto tentando di utilizzare la nuova libreria Chromecast e Firebase Analytics, ma sto ricevendo l'errore "com.google.android.gms.internal.zzsj $ zza: non è stato trovato alcun modulo accettabile. La versione locale è 0 e la versione remota è 0." nel metodo Activity onCreate su com.google.android.gms.cast.framework.CastContext. (Origine sconosciuta). Qualche idea se questo è dovuto alla funzionalità Cast che non funziona con gli emulatori o se si tratta di un problema di versione? Gli emulatori che sto testando eseguono 5.0 e 5.1."Nessun modulo accettabile trovato" su emulatori Android che utilizzano i servizi di riproduzione com.google.android.gms 9.2.0

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    FirebaseAnalytics mFirebaseAnalytics = FirebaseAnalytics.getInstance(this); 
    setupCastListener(); 
    mCastContext = CastContext.getSharedInstance(this); 
    mCastSession = mCastContext.getSessionManager().getCurrentCastSession(); 
    mCastContext.getSessionManager().addSessionManagerListener(mSessionManagerListener, CastSession.class); 
    mFirebaseAnalytics = FirebaseAnalytics.getInstance(this); 
} 

Grazie

+0

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. –

risposta

9

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.

+0

Grazie a qbix. Forse dovrei ripensare a usare questa versione per un po '. Peccato che la funzionalità del cast sia stata molto migliorata. – Jaz

+1

Grazie per il campione. Dopo alcuni scavi, appare l'arresto anomalo quando viene chiamato CastContext.getSharedInstance(), che in realtà sto chiamando da un servizio. Il tuo approccio, sebbene perfettamente valido, non è per niente favorevole agli sviluppatori. Il cast v2 è stato un vero problema a causa dell'intera caldaia del client API di Google: flusso di connessione, errori, callback e risoluzioni degli utenti come le attività di apertura e in attesa dei risultati, il tutto per la sola chiamata a loadMedia di un URL semplice ... I indovinare l'eliminazione di tutte quelle centinaia di righe di codice e il passaggio a V3 non è stata una buona idea. –

+0

Sembra un problema significativo che merita una domanda separata. Sebbene Google affermi che gli aggiornamenti ai servizi di riproduzione vengono inviati ai telefoni in pochi giorni, ci saranno sempre casi in cui un dispositivo non ha la versione più recente. –

1

Questo arresto anomalo si verifica anche su dispositivi reali con GPS non aggiornato. Sto utilizzando Google Cast SDK v3 e GPS 9.2.0

Non ho visto nessuno menzionato che il dispositivo in realtà richiede GPS 9.2.0 affinché il Cast v3 funzioni. Qual è la soluzione alternativa o almeno una soluzione per l'applicazione per non bloccarsi all'avvio?

+0

Penso che l'unica soluzione per gli utenti sia l'aggiornamento ai nuovi servizi di riproduzione di upgrade e la gestione degli errori, purtroppo. – Jaz

+0

Non uso Cast e non ho familiarità con le sue dipendenze. In generale, è possibile utilizzare i metodi in [GoogleApiAvailability] (https://developers.google.com/android/reference/com/google/android/gms/common/GoogleApiAvailability) per risolvere i problemi relativi alla mancata presenza di Play Services o non aggiornato ad una versione necessaria. Ricordo che c'è una guida su come farlo nella documentazione, ma non riesco a trovarlo. Potresti trovare alcuni esempi o più informazioni se lo cerchi. –

+0

@qbix: il cast SDK v3 esplicitamente non richiede alcuna interazione con la disponibilità del client GPS come funzionalità per un utilizzo semplificato. L'eccezione si verifica prima ancora che l'attività venga creata, quindi non c'è un hook effettivo da sovrascrivere e controllare la disponibilità, ecc; sfortunatamente perché ora è troppo semplificato per lavorare dietro le quinte, l'app si blocca solo quando non è presente l'ultimo GPS. Sembra un bug per me più di una funzionalità. –

0

Eliminare l'emulatore e, nel gestore SDK, eliminare la piattaforma SDK su cui è stato creato l'emulatore.

Quindi, scaricare nuovamente la piattaforma SDK e ricostruire il proprio emulatore.

Perché?

Se ci sono stati aggiornamenti a Google Play Services da quando hai scaricato la suddetta piattaforma SDK e hai creato quell'emulatore, la versione legacy di Google Play Services è probabilmente ancora nella build della piattaforma SDK.

Questo ha bruciato 2 ore della mia vita.

Problemi correlati