过滤或隐藏可用的ChromeCast设备

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

我曾尝试抓取MediaRouteDialogFactory并在该级别过滤设备,但没有运气。 似乎没有任何可以隐藏或删除路线的机制。


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

public boolean onFilterRoute(MediaRouter.RouteInfo route)
如果路线应包含在列表中,则返回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());

一种方法如下:

  • 扩展MediaRouteDialogFactory并覆盖onCreateChooserDialogFragment()以返回您自己的选择器对话框片断,比如'MyChooserDialogFragment'; 这应该扩展MediaRouteChooserDialogFactory。
  • MyChooserDialogFragment ,重写onCreateChooserDialog()返回,比如说MyChooserDialog ,它扩展了MediaRouteChooserDialog
  • 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;

  • 链接地址: http://www.djcxy.com/p/24613.html

    上一篇: Filtering Or Hiding Available ChromeCast Devices

    下一篇: Is it possible to programmatically say for sure if an android device is rooted?