好的,所以我想弄清楚如何获取最新的可用chromecast设备列表,我这样做是为了让我的应用可以检查chromecast何时没有使用然后打开我的接收器应用程序。
我在下面的代码中遇到了一些意想不到的行为:
public class MainActivity extends Activity {
...
@Override
public void onCreate(Bundle savedInstanceState) {
...
mMediaRouterCallback = new MyMediaRouterCallback();
mMediaRouter = MediaRouter.getInstance(context);
mMediaRouteSelector = new MediaRouteSelector.Builder()
.addControlCategory(CastMediaControlIntent.categoryForCast(context.getString(R.string.app_id)))
.build();
mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback,
MediaRouter.CALLBACK_FLAG_PERFORM_ACTIVE_SCAN);
}
这会将MediaRouter回调添加到MediaRouter。我选择使用主动扫描标志。
private class MyMediaRouterCallback extends MediaRouter.Callback {
...
@Override
public void onRouteAdded(MediaRouter router, MediaRouter.RouteInfo info) {
Log.d(TAG, "Description 1 " + info.getDescription());
mSelectedDevice = CastDevice.getFromBundle(info.getExtras());
Log.d(TAG, "Description 2 " + mSelectedDevice.toString());
if(info.getDescription().equals("Chromecast")) {
// code to launch chromecast receiver app here.
}
}
}
我对MediaRouter.Callback的实现覆盖onRouteAdded,它只是打印一些有关它找到的设备的信息。描述1描述了设备正在使用的接收器应用程序,描述2给出了它的名称。
但是,当最初运行此代码时,会发现两次打印相同的设备:
07-05 21:01:12.270: D/MainActivity(9730): Description 1 Casting HelloText
07-05 21:01:12.280: D/MainActivity(9730): Description 2 "Downstairs"
07-05 21:01:12.280: D/MainActivity(9730): Description 1 Casting HelloText
07-05 21:01:12.280: D/MainActivity(9730): Description 2 "Downstairs"
然后定期调用onRouteAdded回调,有时仅列出设备一次,其他时间列出设备两次。但我的理解是,只有在添加新路由时才应调用此回调。
我想在命令中找到所有可用的设备,而不是以我无法控制的随机间隔,我需要做什么?我无法找到适合这种情况的回调(例如每当设备更新/更改时),也无法在不使用回调的情况下找到列出它们的方法,因此我有点卡住了。 / p>
(我一直在这里找到这些HelloText-Android示例的测试https://github.com/googlecast/CastHelloText-android,我也是在几天前启动了这个(我的第一个android项目),所以如果我错过了一些可怕的东西我会道歉明显)
提前致谢。
答案 0 :(得分:1)
Call getRoutes()
获取您想要的时间点的已知路线列表。迭代他们。 Call matchesSelector()
on each过滤掉与您所需控件类别匹配的内容。
答案 1 :(得分:0)
如果您正在收听“onRouteAdded()”,您还需要收听“onRouteRemoved()”以进行正确的簿记;如果添加了一个设备,它可以被删除并再次添加,所以如果你只是听onRouteAdded(),它可能会被添加多次。如果您不希望立即得到通知并且只想在某些点按需知道列表,那么从MedaiaRoute.getRoutes()获取列表可能会更容易。