chromecast 发件人示例中的 Android 空指针
Posted
技术标签:
【中文标题】chromecast 发件人示例中的 Android 空指针【英文标题】:Android nullpointer in chromecast sender sample 【发布时间】:2014-08-13 19:13:10 【问题描述】:我已经在https://developers.google.com/cast/docs/android_sender?hl=ko 完成了 chromecast 发件人应用程序的基本设置中的所有步骤
我的 onCreateOptions 菜单中不断有一个空指针:
MediaRouteActionProvider mediaRouteActionProvider =
(MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem);
mediaRouteActionProvider.setRouteSelector(this.mediaRouteSelector);
当我调试并单步执行时,我可以看到菜单项中的 mActionProvider 为空。
但是我使用
设置菜单,就像在示例中一样<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >
>
<item
android:id="@+id/media_route_menu_item"
android:title="@string/media_route_menu_title"
android:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
android:showAsAction="always"/>
<item
这是我在 oncreate 中对媒体路由器的实例化
mMediaRouter = MediaRouter.getInstance(getApplicationContext());
mediaRouteSelector = new MediaRouteSelector.Builder()
.addControlCategory(CastMediaControlIntent.categoryForCast(CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID))
.build();
我还使用从 ActionBarActivity 扩展的活动,并且我导入了所有需要的库。我已经看到这是一个常见问题,但我还没有看到一个常见的修复方法。是否有一些新标志或我缺少的东西来让它工作?
【问题讨论】:
您的 Android 清单中是否有 Google Play 服务依赖项:对于任何查找与我在这里得到的类似 npe 的人来说,这是解决我问题的解决方案。我在这里遇到了一个空指针:
MediaRouteActionProvider mediaRouteActionProvider =
(MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem);
当我进行一些调试时,我可以看到,即使我的所有设置都是正确的,但由于某种原因,在我的项目中,某些原因导致 menuitem 的操作提供程序始终为空。对我有用的解决方案是即时设置一个,然后我最终能够使用以下代码显示设备弹出窗口。
MenuItem mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item);
MediaRouteActionProvider mediaRouteActionProvider =
(MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem);
if(mediaRouteActionProvider==null)
mediaRouteActionProvider = new MediaRouteActionProvider(this);
MenuItemCompat.setActionProvider(mediaRouteMenuItem, mediaRouteActionProvider);
mediaRouteActionProvider.setRouteSelector(this.mediaRouteSelector);
mediaRouteActionProvider.setDialogFactory(new MediaRouteDialogFactory()
@Override
public MediaRouteControllerDialogFragment onCreateControllerDialogFragment()
return new MediaRouteControllerDialogFragment()
@Override
public MediaRouteControllerDialog onCreateControllerDialog(
Context context, Bundle savedInstanceState)
MediaRouteControllerDialog mControllerDialog =
new MediaRouteControllerDialog(TrailerPlayer.this);
return mControllerDialog;
;
);
【讨论】:
【参考方案2】:确保您的菜单已经膨胀。如果您使用的是自定义 Super 类,请在菜单膨胀后添加 addMediaRouterButton 调用。
【讨论】:
以上是关于chromecast 发件人示例中的 Android 空指针的主要内容,如果未能解决你的问题,请参考以下文章
从 Android 发件人应用程序进行 Chromecast 时更新电视上的搜索栏
检测我是不是是唯一连接到 Chromecast 设备的 Chromecast 发件人应用