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,但扩展它没有多大意义(你需要复制所有代码,因为一切都是私有的,你不能使用它们,例如mRoutermCallback) .

我的问题是,我怎样才能显示我自己的对话框和列出我自己的路线,同时将CastButtonFactory.setUpMediaRouteButton 解决方案保留在onCreateOptionsMenu 中?我真的不想打扰 chromecast 按钮状态,如可见性、连接状态、决定是否需要显示路由选择器或路由控制器等。我什至不确定我应该如何进行路由列表/管理发现,所以在该主题上也有一点帮助会很好。

【问题讨论】:

【参考方案1】:

我自己解决了这个问题,它对我很有用。简而言之,这是我所做的,也许它提供了一些想法。

我创建了一个CustomMediaRouteDialogFactory,它扩展了MediaRouteDialogFactory,并通过覆盖onCreateChooserDialogFragmentonCreateControllerDialogFragment 提供了我自己的对话框。这些对话框从框架中扩展了原来的选择器和控制器对话框。

工具栏内的演员按钮状态仍然是自动管理的,我只是将自己的路由选择器和对话框工厂传递给提供者。

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 等设备?

扩展 MediaRouteButton 行为

Chromecast 自定义 MediaRouteChooserDialog

启动自定义 chromecast 接收器有时会超时

如何在 android 的选项菜单中为 chromecast 添加自定义投射按钮?

Chromecast 自定义命令不起作用