Chromecast 自定义 MediaRouteChooserDialog
Posted
技术标签:
【中文标题】Chromecast 自定义 MediaRouteChooserDialog【英文标题】:Chromecast custom MediaRouteChooserDialog 【发布时间】:2018-06-10 09:52:02 【问题描述】:我在自定义 MediaRouteChooser / MediaRouteController 对话框时遇到问题(我需要不同的布局,一些额外的操作)。
投射按钮是通过调用来设置的
CastButtonFactory.setUpMediaRouteButton(getApplicationContext(), menu, R.id.media_route_menu_item);
内 onCreateOptionsMenu
。
我发现我需要扩展 MediaRouteDialogFactory
并返回我自己的 MediaRouteChooserDialogFragment
并覆盖 onCreateChooserDialog
并返回我的自定义对话框。然而,这需要是一个MediaRouteChooserDialog
,但扩展它没有多大意义(你需要复制所有代码,因为一切都是私有的,你不能使用它们,例如mRouter
,mCallback
) .
我的问题是,我怎样才能显示我自己的对话框和列出我自己的路线,同时将CastButtonFactory.setUpMediaRouteButton
解决方案保留在onCreateOptionsMenu
中?我真的不想打扰 chromecast 按钮状态,如可见性、连接状态、决定是否需要显示路由选择器或路由控制器等。我什至不确定我应该如何进行路由列表/管理发现,所以在该主题上也有一点帮助会很好。
【问题讨论】:
【参考方案1】:我自己解决了这个问题,它对我很有用。简而言之,这是我所做的,也许它提供了一些想法。
我创建了一个CustomMediaRouteDialogFactory
,它扩展了MediaRouteDialogFactory
,并通过覆盖onCreateChooserDialogFragment
和onCreateControllerDialogFragment
提供了我自己的对话框。这些对话框从框架中扩展了原来的选择器和控制器对话框。
工具栏内的演员按钮状态仍然是自动管理的,我只是将自己的路由选择器和对话框工厂传递给提供者。
onCreateOptionsMenu:
MenuItem mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item);
MediaRouteActionProvider mediaRouteActionProvider = (MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem);
mediaRouteActionProvider.setRouteSelector(chromecastManager.getMediaRouteSelector());
mediaRouteActionProvider.setDialogFactory(mediaRouteDialogFactory);
缺点: 通过查看框架选择器对话框实现的源代码和一些其他依赖项,我最终编写了自己的路由发现和过滤代码。其次,控制器对话框直接与 RemoteMediaClient 通信。
这样我可以完全定制,但需要一些额外的工作。
【讨论】:
尽管这在今天可以工作,但我会非常小心,因为每次框架更新都可能破坏该功能以上是关于Chromecast 自定义 MediaRouteChooserDialog的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 上使用 MediaRoute API 发现 Google TV 和 Nexus-Q 等设备?
Chromecast 自定义 MediaRouteChooserDialog