Chromecast自定义MediaRouteChooserDialog

问题描述 投票:2回答:1

我在定制MediaRouteChooser / MediaRouteController对话框时遇到问题(我需要不同的布局,一些额外的操作)。

通过在CastButtonFactory.setUpMediaRouteButton(getApplicationContext(), menu, R.id.media_route_menu_item);中调用onCreateOptionsMenu来设置强制转换按钮。

我发现我需要扩展MediaRouteDialogFactory,我返回自己的MediaRouteChooserDialogFragment,我覆盖onCreateChooserDialog并返回我的自定义对话框。然而,这需要是一个MediaRouteChooserDialog但扩展它没有多大意义(你需要复制所有的代码,因为一切都是私有的,你不能使用它们,例如mRoutermCallback)。

我的问题是,我该如何做,并显示我自己的对话框和自己的路线列表,但也保持CastButtonFactory.setUpMediaRouteButton解决方案在onCreateOptionsMenu?我真的不想打扰Chromecast按钮状态,如可见性,连接状态,决定是否需要显示路由选择器或路由控制器等。我甚至不确定我应该如何进行路由列表/管理发现,所以在这个主题上也会有一点帮助。

android chromecast android-dialogfragment appcompatdialog
1个回答
0
投票

我自己解决了这个问题,对我来说很有用。这就是我简单地做的,也许它提供了一些想法。

我创建了一个扩展CustomMediaRouteDialogFactoryMediaRouteDialogFactory并通过覆盖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通信。

这样我可以完全定制,但需要一些额外的工作。

© www.soinside.com 2019 - 2024. All rights reserved.