我已经在https://developers.google.com/cast/docs/android_sender?hl=ko
中完成了chromecast发送者应用基本设置中的所有步骤我在onCreateOptions菜单中不断得到一个nullpointer:
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中实例化mediarouter
mMediaRouter = MediaRouter.getInstance(getApplicationContext());
mediaRouteSelector = new MediaRouteSelector.Builder()
.addControlCategory(CastMediaControlIntent.categoryForCast(CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID))
.build();
我还使用从ActionBarActivity扩展的活动,并导入所需的所有库。我见过这是一个常见的问题,但我还没有看到一个常见的修复方法。是否有一些新的旗帜或者我想要的东西让它起作用?
答案 0 :(得分:0)
对于任何一个查找类似npe的人来说,这是我解决问题的解决方案。我在这里遇到了一个空指针:
MediaRouteActionProvider mediaRouteActionProvider =
(MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem);
当我进行一些调试时,我可以看到即使我的所有设置都是正确的,由于某些原因,在我的项目中,某些事情导致menuitem的动作提供者始终为null。我的解决方案对我来说只是设置一个,然后我终于可以使用以下代码显示设备弹出窗口。
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;
}
};
}
});
答案 1 :(得分:0)
确保您的菜单已经充气。如果您使用自定义超类,请在菜单膨胀后添加addMediaRouterButton调用。