Google Cast 远程显示崩溃(选择器不能为空)

Posted

技术标签:

【中文标题】Google Cast 远程显示崩溃(选择器不能为空)【英文标题】:Google Cast Remote Display Crash (Selector must not be null) 【发布时间】:2016-01-02 20:11:26 【问题描述】:

我正在为画廊应用程序制作远程显示,但我遇到了一个非常奇怪的错误,该错误似乎与演员表无关。一开始是因为一个无效的App ID而崩溃,但是在注册它并获得一个App ID之后,它崩溃并说选择器不能为空,但是Cast部分不在调用Null的同一代码中。有什么帮助吗?

//Inside of OnCreate
MediaRouter = MediaRouter.getInstance(getApplicationContext());
    MediaRouteSelector mMediaRouteSelector = new MediaRouteSelector.Builder()
            .addControlCategory( CastMediaControlIntent.categoryForCast(getString(R.string.cast_sdk_id)))
            .build();



//Inside of OnCreateOptionsMenu
 public boolean onCreateOptionsMenu(Menu menu) 
    getMenuInflater().inflate(R.menu.menu_viewer, menu);
    if (mAdapter.getEntries().size() > 0) 
        MediaEntry currentEntry = mAdapter.getEntries().get(mCurrentPosition);
        if (currentEntry == null || currentEntry.isVideo()) 
            menu.findItem(R.id.print).setVisible(false);
            menu.findItem(R.id.edit).setVisible(false);
            menu.findItem(R.id.set_as).setVisible(false);
         else 
            menu.findItem(R.id.print).setVisible(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT);
            menu.findItem(R.id.edit).setVisible(true);
            menu.findItem(R.id.set_as).setVisible(true);
        
    
    menu.findItem(R.id.slideshow).setVisible(!mAllVideos && mSlideshowTimer == null);
    MenuItem mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item);
    MediaRouteActionProvider mediaRouteActionProvider =
            (MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem);
    mediaRouteActionProvider.setRouteSelector(mMediaRouteSelector);

    return super.onCreateOptionsMenu(menu);;



java.lang.IllegalArgumentException: selector must not be null
                                                                                 at android.support.v7.app.MediaRouteActionProvider.setRouteSelector(MediaRouteActionProvider.java:169)
                                                                                 at com.afollestad.impression.viewer.ViewerActivity.onCreateOptionsMenu(ViewerActivity.java:804)

【问题讨论】:

【参考方案1】:

当您声明某行代码引发了异常时,指明是哪一行代码很有用,因为我们没有您的完整源代码。关于您的问题,在您的onCreate) 中,正如您在帖子中所述,您有MediaRouteSelector mMediaRouteSelector = ...。由于我们没有您的源代码,我将假设它确实与您在此处复制的一样。由于您还在onCreateOptionsMenu() 中使用了mMediaRouteSelector,听起来您有一个实例变量mMediaRouteSelector,它在您的onCreate() 中隐藏;换句话说,在onCreate() 中所做的分配是该方法的本地而不是全局的,因此它在onCreateOptionsMenu() 中实际上是空的。将onCreate()中的赋值改为

mMediaRouteSelector = new MediaRouteSelector.Builder()
            .addControlCategory( CastMediaControlIntent.categoryForCast(getString(R.string.cast_sdk_id)))
            .build();

【讨论】:

我回家后试试这个。如果有效,我会将其标记为答案。谢谢!! 好的,应用程序不再崩溃,但它不显示 Chromecast 按钮。 忽略该评论。图标没有弹出是由于拼写错误。但是您的代码有效。谢谢!

以上是关于Google Cast 远程显示崩溃(选择器不能为空)的主要内容,如果未能解决你的问题,请参考以下文章

Chromecast 扩展控制器、曲目选择器对话框在 11.0.2 更新后使应用程序崩溃

vs2017远程调试linux配置连接管理器时蓝屏

连接后如何在 Google Cast 上显示信息

选择表格单元格以显示 iOS7 上的新视图崩溃,“无法识别的选择器发送到实例”

Android:让 Google Cast MediaRouter 图标显示

当用户触摸注释时,无法识别的选择器崩溃