过滤或隐藏可用的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; 
上一篇: Filtering Or Hiding Available ChromeCast Devices
下一篇: Is it possible to programmatically say for sure if an android device is rooted?
