过滤或隐藏可用的ChromeCast设备

时间:2015-06-02 14:55:46

标签: android chromecast google-cast

我正在使用Chromecast处理应用,我希望能够根据设备名称或说明过滤可用的设备或路由。因此,当用户单击MediaRouteButton时,只会显示一些可用设备。我的应用程序的用例发生在有许多演员设备可用的地方,我想确保用户不会在另一个房间内意外选择设备。应用程序中的用户信息存储用户所在的房间信息,并且以明智的方式命名chromecast,以便理想地,仅特定用户房间的chromecast设备将显示为可用于它们。

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

2 个答案:

答案 0 :(得分:3)

要从选择器对话框中过滤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());

答案 1 :(得分: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;