Android 按需获取可用Chromecast列表

Android 按需获取可用Chromecast列表,android,chromecast,Android,Chromecast,好的,所以我想知道如何获取可用chromecast设备的最新列表,这样我的应用程序就可以在chromecast未使用时进行检查,然后打开我的接收器应用程序 我在以下代码中出现了一些意外行为: public class MainActivity extends Activity { ... @Override public void onCreate(Bundle savedInstanceState) { ... mMediaRouterCallback = new

好的,所以我想知道如何获取可用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回调,有时只列出设备一次,有时列出设备两次。然而,我的理解是,只有在添加新路由时才应该调用此回调

我想在命令中找到所有可用的设备,而不是我无法控制的随机间隔,我需要做什么?我找不到一个似乎适合这种情况的回调(比如设备更新/更改时),也找不到不使用回调就列出它们的方法,所以我有点卡住了

(我一直在基于这里找到的HelloText Android示例的这些测试,而且我在几天前才开始了这个(我的第一个Android项目),所以如果我遗漏了一些非常明显的东西,我道歉)


提前感谢。

获取您所需时间点的已知路线列表。迭代它们。要筛选出与所需控件类别匹配的控件。

如果您正在侦听“onRouteAdded()”,则还需要侦听“onRouteRemoved()”,以进行正确的簿记;如果添加了一个设备,则可以将其删除并再次添加。因此,如果您只听onRouteAdded(),它可能会被添加多次。从MedaiRoute获取列表。如果您不想立即收到通知,只想在需要时的特定时间点了解列表,则getRoutes()可能会更容易。

您好,感谢您的响应,使用getRoutes()似乎并没有实际更新MediaRoute对象,它只是提供旧信息。例如,我有一个循环,在每次调用getRoutes之间等待30秒,但如果我在接收器应用程序之间切换(从谷歌音乐到youtube),它只会偶尔注意到,有时chromecast会从列表中完全消失,但我知道它仍然在工作,因为我的网络上的Airplay设备会继续出现。有什么想法吗?@user84348:这是
MediaRouter
的问题,还是Chromecast
MediaRouteProvider
的问题,我不能说。奇怪的是,Chromecast图标在我的应用程序中消失的同时getRoutes()不再找到Chromecast,但是如果我要切换到另一个Chromecast应用程序,我的chromecast就在那里。当你从getRoutes()得到响应,从Google音乐切换到YouTube时,你期望会发生什么?最初我以为它会给我在chrome cast上运行的应用程序的名称,当时我在route上调用getDescription,但显然不是这样。我最终实现了您对当前正在运行的chromecast应用程序的建议。它工作得很好,除了当接收器应用程序为youtube时调用Cast.CastApi.joinApplication(mApiClient)会使2005应用程序\u未\u运行,每次,我都能成功加入其他接收器应用程序谢谢您的回答,我在从我的chromecast like获取最新信息方面仍然存在问题,google play服务已经修复了吗?