我正在使用Chromecast处理应用,我希望能够根据设备名称或说明过滤可用的设备或路由。因此,当用户单击MediaRouteButton时,只会显示一些可用设备。我的应用程序的用例发生在有许多演员设备可用的地方,我想确保用户不会在另一个房间内意外选择设备。应用程序中的用户信息存储用户所在的房间信息,并且以明智的方式命名chromecast,以便理想地,仅特定用户房间的chromecast设备将显示为可用于它们。
我试过抓住MediaRouteDialogFactory
并过滤该级别的设备,但没有运气。似乎没有任何机制可以找到隐藏或删除路线。
答案 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)
一种方法如下:
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;