【问题标题】:Filtering Or Hiding Available ChromeCast Devices过滤或隐藏可用的 ChromeCast 设备
【发布时间】:2015-06-02 14:55:45
【问题描述】:

我正在使用 Chromecast 开发一个应用,我希望能够根据设备名称或描述过滤可用的设备或路由。因此,当用户单击 MediaRouteButton 时,只会显示一些可用设备。我的应用程序的用例发生在有许多投射设备可用的地方,我想确保用户不会意外选择另一个房间中的设备。应用程序中的用户信息存储用户所在的房间信息,并且 chromecast 以智能方式命名,因此理想情况下,只有特定用户房间的 chromecast 设备才会显示为可供他们使用。

我已尝试获取MediaRouteDialogFactory 并在该级别过滤设备,但没有运气。我似乎找不到任何机制来隐藏或删除路线。

【问题讨论】:

  • 我相信您会使用MediaRouterSelecter 来控制可见路线。不过,我不确定您是否可以按设备名称进行过滤。

标签: android chromecast google-cast


【解决方案1】:

要从选择器对话框中过滤 Chromecast 设备,您可以使用 onFilterRoute

公共布尔 onFilterRoute(MediaRouter.RouteInfo 路由)
如果路由应该包含在列表中,则返回 true。

默认实现为启用的非默认路由返回 true 匹配选择器。子类可以重写这个方法来过滤 路线不同。

你需要创建一个CustomMediaRouteChooserDialog:

public class CustomMediaRouteChooserDialog extends MediaRouteChooserDialog {
    public CustomMediaRouteChooserDialog(Context context) {
        super(context);
    }

    public CustomMediaRouteChooserDialog(Context context, int theme) {
        super(context, theme);
    }

    @Override
    public boolean onFilterRoute(MediaRouter.RouteInfo route) {
        // Apply your logic here.
        // Return false to hide the device, true otherwise

        if (TextUtils.equals(route.getName(), "Chromecast-hidden"))
            return false;
        else
            return true;
    }
}

然后创建一个CustomMediaRouteChooserDialogFragment:

public class CustomMediaRouteChooserDialogFragment extends MediaRouteChooserDialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        CustomMediaRouteChooserDialog dialog = new CustomMediaRouteChooserDialog(getActivity());
        dialog.setRouteSelector(getRouteSelector());
        return dialog;
    }
}

然后创建一个CustomMediaRouteDialogFactory:

public class CustomMediaRouteDialogFactory extends MediaRouteDialogFactory {

    @Override
    public MediaRouteChooserDialogFragment onCreateChooserDialogFragment() {
        return new CustomMediaRouteChooserDialogFragment();
    }
}

然后在创建你的MediaRouteActionProvider 之后调用setDialogFactory:

mediaRouteActionProvider.setDialogFactory(new CustomMediaRouteDialogFactory());

【讨论】:

  • 谢谢!我在运行它时遇到了问题(背景颜色上的 IllegalArgumentException),但在 @Ali naddaf 的回答 1 的帮助下。我已将 onCreateDialog 替换为 onCreateChooserDialog 2. 并使用 this answer,我已替换 @987654334 @ by CustomMediaRouteChooserDialog(context, R.style.Theme_AppCompat_NoActionBar) 现在一切正常!
【解决方案2】:

一种方法如下:

  1. 扩展MediaRouteDialogFactory 并覆盖onCreateChooserDialogFragment() 以返回您自己的选择器对话框片段,例如“MyChooserDialogFragment”;这应该扩展 MediaRouteChooserDialogFactory。
  2. MyChooserDialogFragment 中,覆盖onCreateChooserDialog() 以返回MyChooserDialog,它扩展了MediaRouteChooserDialog
  3. MyChooserDialog 中,覆盖onFilterRoute(MediaRouter.RouteInfo route))。在此覆盖中,您通过了一个路由,您可以返回 true 以接受或返回 false 以拒绝该路由;所以一个幼稚的实现是return route.getName().startsWith('room10')(实际上,它应该更聪明一点:

    String validPrefix = 'room10'; boolean validRoute = route.getName().startsWith(validPrefix); return !route.isDefault() && route.matchesSelector(getRouteSelector()) && validRoute;

【讨论】:

  • 太好了,谢谢。我之前没能找到 onFilterRoute() 方法。
猜你喜欢
  • 2013-09-13
  • 2022-01-09
  • 2014-03-13
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 2019-05-12
  • 2019-07-06
  • 2013-03-27
相关资源
最近更新 更多