【问题标题】:How to Launch "Connect to Device" Dialog When Using a Custom Cast Button?使用自定义投射按钮时如何启动“连接到设备”对话框?
【发布时间】:2014-08-11 20:24:06
【问题描述】:

似乎Google official documentation on accessing a Chromecast from Android 主要围绕着一个似乎自动处理选择器对话框并将用户选择返回给回调的 ActionBar 按钮。

我的活动中有一个自定义 Button(视图)和 handleCastButton() 方法。 是否有使用自定义 UI 时如何调出标准选择器的示例?

编辑:看起来我应该可以对股票 MediaRouteDialogFactory 做点什么,但我找不到任何细节。

【问题讨论】:

    标签: android chromecast


    【解决方案1】:

    如果您没有使用MediaRouteActionProvider 将投射按钮添加到ActionBar,您应该使用具有相同行为的MediaRouteButton(调出标准选择器对话框,根据是否存在自动更改状态)可用的 Chromecast 等),但可以放置在普通 Button 可以放置的任何位置。

    可以通过复制default images drawables(以及drawable-hdpidrawable-mdpidrawable-mdpidrawable-xhdpi 中的相关pngs)并设置它们的样式来完成自定义样式,或者只提供相同名称的覆盖资源。

    【讨论】:

    • 我尝试了 MediaRouteButton,但该图标与我的应用程序的其他图标不匹配,我需要能够更好地控制按下按钮时会发生什么。实际上,如果有办法只更改按钮的图标,我可能会处理其余的。
    • 您可以按照this post 设置 MediaRouteButton 的样式。在我的答案中添加了有关样式的详细信息
    • 感谢您的信息。看起来我也可以创建自己的MediaRouteDialogFactory 并使用它调用setDialogFactory(),如果我想更改按下按钮时显示的部分或全部对话框。
    【解决方案2】:

    看看这个样本project,你应该可以重复使用其中的一些。您基本上需要注册以侦听找到和删除的路线,并维护可用列表的列表,并在用户单击您的按钮时将其呈现给用户。当用户选择路由时,您需要处理连接,并在媒体路由器实例中将路由设置为选定的路由。

    【讨论】:

    • 我已经尝试过那个示例项目。当我运行它时,屏幕上有四个按钮,所有这些按钮都打开了完全空白的活动(在我的 N7 上)。此外,应用程序源似乎创建了自己的选择对话框,而不是打开库存对话框。
    • 如果您要放置自己的按钮(即,不使用 ActionProvider,也不使用 MediaRouteButton),那么您需要自己创建对话框;您无法直接访问媒体路由选择器对话框的库存对话框。
    【解决方案3】:

    分析MediaRouteButton source code后,这似乎可行:

    public void handleCastButton() {
        final FragmentManager fm = fragmentActivity.getSupportFragmentManager();
        MediaRouteChooserDialogFragment f = MediaRouteDialogFactory.getDefault().onCreateChooserDialogFragment();
        f.setRouteSelector(mediaRouteSelector);
        f.show(fm, "android.support.v7.mediarouter:MediaRouteChooserDialogFragment");
    }
    

    就是这样!确保您的基本活动是FragmentActivity,并且所有导入都来自android.support.v7.*。对话框片段将使用您与所述选择器关联的Callback

    还有一个MediaRouteControllerDialogFragment,当您已经连接并想要调整音量或断开连接时。

    【讨论】:

    • 这适用于连接,但是当已经连接到投射设备时,选择器不会提供与设备断开连接的选项。它显示连接的设备并将其正确指示为投射,但按下它不会做任何事情。我希望调用 MediaRouter.Callback 的 onRouteUnselected 方法,但事实并非如此。知道如何实现这种行为吗?
    • 啊,在MediaRouteButton源码中也找到了:'MediaRouteControllerDialogFragment f = MediaRouteDialogFactory.getDefault().onCreateControllerDialogFragment(); f.show(fm, "android.support.v7.mediarouter:MediaRouteControllerDialogFragment");'
    • 不适合我 :( 只是旋转和“搜索设备...”我的手机能够通过内置的 Android 功能进行屏幕镜像。
    • 如果你看到一个对话框,那么你已经得到了 this 部分的工作。如果它找不到设备,那么您可能在其他地方遇到了配置问题。
    • 等一下。似乎这种方式不是 Miracast 加密狗发现的正确方式,正如 Mark Murphy 在 cmets 中告诉我们的 - stackoverflow.com/questions/29524643/…。 Miracast 使用此方法成功了吗?
    猜你喜欢
    • 2019-08-17
    • 2015-03-06
    • 2018-02-10
    • 1970-01-01
    • 2021-01-23
    • 2019-03-09
    • 2018-09-22
    • 2012-02-29
    • 2017-08-16
    相关资源
    最近更新 更多