使用com.google.android.gms播放服务9.2.0在Android模拟器上找不到“无法接受的模块”

时间:2016-07-07 17:40:10

标签: android firebase chromecast

我最近更新了com.google.android.gms:play-services 9.2.0,我正在尝试使用新的Chromecast库和Firebase Analytics,但收到错误“com.google.android.gms.internal。 zzsj $ zza:找不到可接受的模块。本地版本为0,远程版本为0。“在com.google.android.gms.cast.framework.CastContext中的Activity onCreate方法中。(未知来源)。任何想法,如果这是由于Cast功能不与模拟器一起使用或者是否是版本问题?我正在测试的模拟器运行5.0和5.1。

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

由于

4 个答案:

答案 0 :(得分:11)

模拟器上的Play服务版本不支持9.2.0。这时,我认为任何模拟器映像都不支持9.2.0。您的选项是降级到9.0.2,或者在真实设备上运行,直到发布更新的模拟器映像。

如果仔细查看logcat输出,您应该会看到如下消息:

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

您可以转到“设置/应用”,查找Google Play服务,然后点按它以获取应用信息,即可查看模拟器正在使用的GPS版本号。

您可以致电GoogleApiAvalability.GOOGLE_PLAY_SERVICES_VERSION_CODE从代码中获取GPS版本号。

This answer包含有关模拟器版本的一些相关信息。

Adrian Cretu关于真实设备的问题的更新

我的实验表明,在真实设备上运行的Cast应用可以检测较旧版本的Play服务并启动解决方案处理。我试用了CastVideos示例应用。我的解决方案可能不是最好的,但演示了这个概念。我创建了一个在启动时运行的新活动,并检查Play服务的可用性。我更改了清单,使此活动成为启动器活动,而不是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");
                }
            }
        });
    }
}

如果Play Services存在,最新且已启用,则检查可用性的任务会立即完成,并启动原始启动活动VideoBrowserActivity。否则,将显示一个对话框,告知用户必须升级Play服务,并在用户接受后,打开Play商店并开始下载最新版本。

我无法找到一种干净地过渡回VideoBrowserActivity的方法。我不得不重新启动应用程序。通过更多工作,我认为可以从过时的Play服务中获得干净的恢复。至少比应用程序崩溃更好。

答案 1 :(得分:1)

此崩溃也发生在具有未更新GPS的真实设备上。我使用的是Google Cast SDK v3和GPS 9.2.0

我没有看到任何提到该设备实际上需要GPS 9.2.0才能使Cast v3工作。什么是变通方法或至少是一个解决方案,让应用程序不会在启动时崩溃?

答案 2 :(得分:0)

当我更新google play developer services app时,我能够解决它。

答案 3 :(得分:-1)

删除模拟器,并在SDK管理器中删除构建该模拟器的SDK平台。

然后,重新下载该SDK平台并重新构建您的模拟器。

为什么?

如果您已经下载了所述SDK平台并构建了该模拟器,Google Play服务已经有更新,那么旧版Google Play服务可能仍然在该SDK平台的构建中。

这烧掉了我生命中的2个小时。