MediaRouter 的 Chromecast Nullpointer 异常

Posted

技术标签:

【中文标题】MediaRouter 的 Chromecast Nullpointer 异常【英文标题】:Chromecast Nullpointer exception for MediaRouter 【发布时间】:2014-07-08 23:50:51 【问题描述】:

我正在尝试将 Chromecast 图标放在我的菜单项中。我在菜单布局中定义了以下内容。

<item
android:id="@+id/media_route_menu_item"
android:title="Stream your videos!"
android:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
android:showAsAction="always"/>

在我的 onCreateOptionsMenu() 方法中,我按照官方 chromecast 教程中的建议执行以下操作。

   1.   mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item);
   2.  mediaRouteActionProvider =
            (MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem);
   3. mediaRouteActionProvider.setRouteSelector(mMediaRouteSelector);

这在上面的第 3 行中给了我这个错误。

 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.app.MediaRouteActionProvider.setRouteSelector(android.support.v7.media.MediaRouteSelector)' on a null object reference

我做错了什么?有人可以帮帮我吗?

编辑:

这是我的 mMediaRouteSelector:

         mMediaRouteSelector = new MediaRouteSelector.Builder()
            .addControlCategory(CastMediaControlIntent.categoryForCast("[MY APP ID]"))
            .build();

【问题讨论】:

你的 mMediaRouteSelector 是什么? 您的活动必须扩展 ActionBarActivity 它正在扩展actionbaractivity 检查这个:***.com/a/22030832/956415 MenuItem.mActionProvider is null的可能重复 【参考方案1】:

有时,这些类型的错误发生是因为 proguard 更改了对象和/或函数的名称。

一种可能的解决方案是将这些添加到您的 progaurd 配置文件中:

-dontwarn android.support.v7.**
-keep class android.support.v7.internal.**  *; 
-keep interface android.support.v7.internal.**  *; 
-keep class android.support.v7.**  *; 
-keep interface android.support.v7.**  *; 

【讨论】:

以上是关于MediaRouter 的 Chromecast Nullpointer 异常的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 MediaRouter 对话框的标题?

Android:让 Google Cast MediaRouter 图标显示

Chromecast 区分 onRouteUnselected 回调

Chromecast 示例项目未在电视上投射

将 Chromecast 集成到支持 ActionBarSherlock 的应用程序中

有没有办法确保我只能看到运行我的应用程序的 Chromecast 设备?