按需获取可用的chromecast列表

时间:2014-07-05 20:13:00

标签: android chromecast

好的,所以我想弄清楚如何获取最新的可用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项目),所以如果我错过了一些可怕的东西我会道歉明显)

提前致谢。

2 个答案:

答案 0 :(得分:1)

Call getRoutes()获取您想要的时间点的已知路线列表。迭代他们。 Call matchesSelector() on each过滤掉与您所需控件类别匹配的内容。

答案 1 :(得分:0)

如果您正在收听“onRouteAdded()”,您还需要收听“onRouteRemoved()”以进行正确的簿记;如果添加了一个设备,它可以被删除并再次添加,所以如果你只是听onRouteAdded(),它可能会被添加多次。如果您不希望立即得到通知并且只想在某些点按需知道列表,那么从MedaiaRoute.getRoutes()获取列表可能会更容易。