过滤或隐藏可用的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?