2016-07-07 4 views
7

Ich habe vor kurzem auf com.google.android.gms: play-services 9.2.0 aktualisiert und versuche zu verwenden Die neue Chromecast-Bibliothek und Firebase Analytics erhalten jedoch den Fehler "com.google.android.gms.internal.zzsj $ zza: Kein akzeptables Modul gefunden. Lokale Version ist 0 und Remoteversion ist 0." in der Activity onCreate-Methode unter com.google.android.gms.cast.framework.CastContext (Unbekannte Quelle). Irgendwelche Ideen, wenn dies daran liegt, dass die Cast-Funktionalität nicht mit den Emulatoren funktioniert oder wenn es sich um ein Versions-Problem handelt? Die Emulatoren, mit denen ich teste, laufen mit 5.0 und 5.1."Kein akzeptables Modul gefunden" auf Android-Emulatoren mit com.google.android.gms play-services 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); 
} 

Dank

+0

Ich habe Fehlermeldung, dass "kein akzeptables Modul gefunden. Lokale Version ist 0 und Remote-Version ist 0", ich füge Laufzeit Berechtigung und Problem gelöst. –

Antwort

9

Die Version von Play-Diensten auf dem Emulator nicht 9.2.0 unterstützt. Zu diesem Zeitpunkt glaube ich nicht, dass eines der Emulator-Images 9.2.0 unterstützt. Sie können entweder auf 9.0.2 herunterstufen oder auf einem echten Gerät ausführen, bis ein aktualisiertes Emulator-Image veröffentlicht wird.

Wenn Sie genau auf Ihre logcat Ausgabe aussehen sollten Sie eine Meldung wie diese sehen:

W/GooglePlayServicesUtil: Google Play services out of date. Requires 9256000 but found 9080030 

Sie können die GPS-Versionsnummer der Emulator, indem Sie auf Einstellungen/Apps verwendet, finden Google Play-Dienste, und tippen Sie darauf, um die App-Info zu erhalten.

Sie können die GPS-Versionsnummer vom Code abrufen, indem Sie GoogleApiAvalability.GOOGLE_PLAY_SERVICES_VERSION_CODE anrufen.

This answer enthält einige verwandte Informationen über Emulatorversionen.

Update für Adrian Cretu Fragen zu realen Geräten

Meine Experimente zeigen, dass es für einen Cast App läuft auf einem realen Gerät möglich ist, eine ältere Version von Play Services zur Erkennung und Bearbeitung der Auflösung zu initiieren. Ich experimentierte mit der CastVideos Beispiel App. Meine Lösung ist vielleicht nicht die beste, aber demonstriert das Konzept. Ich habe eine neue Aktivität erstellt, die beim Start ausgeführt wird und die Verfügbarkeit von Play Services überprüft. Ich habe das manifest diese Aktivität der Launcher Aktivität statt VideoBrowserActivity zu machen:

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

Wenn Play Services vorhanden ist, auf dem neuesten Stand, und aktiviert ist, die Aufgabe, die Verfügbarkeit vervollständigt sofort überprüft und startet VideoBrowserActivity, die ursprüngliche Einführung Aktivität. Andernfalls wird ein Dialogfeld angezeigt, das dem Benutzer mitteilt, dass die Play Services aktualisiert werden müssen. Wenn der Benutzer das akzeptiert hat, wird der Play Store geöffnet und der Benutzer kann einen Download der neuesten Version starten.

Ich konnte keinen Weg finden, sauber zurück zu VideoBrowserActivity zu übergehen. Ich musste die App neu starten. Mit mehr Arbeit, denke ich, ist eine saubere Erholung von veralteten Play Services möglich. Zumindest etwas besser als ein App-Crash.

+0

Danke qbix. Vielleicht sollte ich diese Version ein wenig überdenken. Schade, dass die Darstellungsfunktionalität stark verbessert wurde. – Jaz

+1

Danke für die Probe. Nach einigen Ausgrabungen erscheint der Absturz beim Aufruf von CastContext.getSharedInstance(), den ich gerade von einem Service aus anrufe. Ihre Herangehensweise ist zwar vollkommen gültig, aber überhaupt nicht entwicklerfreundlich. Cast v2 war genau wegen der gesamten Google API-Client-Boiler-Platte ein Problem: Verbindungsfluss, Fehler, Callbacks und Benutzerauflösungen wie das Öffnen von Aktivitäten und das Warten auf die Ergebnisse, alles für den Aufruf von loadMedia einer einfachen URL ... I raten, all diese hunderte Zeilen Code zu löschen und zu v3 zu wechseln, war keine gute Idee. –

+0

Klingt wie ein wichtiges Thema, das eine separate Frage verdient. Obwohl Google behauptet, dass Updates für Play Services in ein paar Tagen auf Handys übertragen werden, gibt es immer Fälle, in denen ein Gerät nicht die neueste Version hat. –

1

Dieser Absturz passiert auch auf realen Geräten mit nicht aktualisierten GPS. Ich verwende Google Cast SDK v3 und GPS 9.2.0

Ich habe nirgendwo erwähnt, dass das Gerät tatsächlich GPS 9.2.0 benötigt, damit der Cast v3 funktioniert. Was ist die Problemumgehung oder zumindest eine Lösung, damit die App beim Start nicht abstürzt?

+0

Ich denke, die einzige Lösung ist für Benutzer, um auf die neuen Upgrade-Play-Dienste zu aktualisieren und die Fehler leider zu behandeln. – Jaz

+0

Ich benutze Cast nicht und bin nicht vertraut mit seinen Abhängigkeiten. Im Allgemeinen können Sie die Methoden in [GoogleApiAvailability] (https://developers.google.com/android/reference/com/google/android/gms/common/GoogleApiAvailability) verwenden, um Probleme mit nicht vorhandenen Play-Services zu beheben oder nicht auf eine benötigte Version aktualisiert. Ich erinnere mich, dass es eine Anleitung gibt, wie man das in der Dokumentation macht, aber nicht finden kann. Sie können einige Beispiele oder mehr Informationen finden, wenn Sie danach suchen. –

+0

@qbix - das Cast SDK v3 erfordert explizit keine Interaktion mit der Verfügbarkeit von GPS-Clients als eine Funktion zur vereinfachten Verwendung. Die Ausnahme tritt auf, bevor die Aktivität überhaupt erstellt wird. Daher gibt es keinen tatsächlichen Hook zum Überschreiben und Überprüfen der Verfügbarkeit usw .; leider, weil jetzt ist zu vereinfacht, um hinter den Kulissen zu arbeiten, stürzt die App nur ab, wenn das neueste GPS nicht vorhanden ist. Sieht für mich eher wie ein Fehler aus als ein Feature. –

0

Löschen Sie den Emulator, und löschen Sie im SDK-Manager die SDK-Plattform, auf der der Emulator erstellt wurde.

Dann erneut diese SDK-Plattform herunterladen und Ihren Emulator neu erstellen.

Warum?

Wenn seit dem Herunterladen der SDK-Plattform und dem Erstellen dieses Emulators Updates für Google Play Services verfügbar sind, befindet sich die ältere Version von Google Play Services wahrscheinlich noch in der Build dieser SDK-Plattform.

Dies verbrannte 2 Stunden meines Lebens.