Android Cast-媒体路由器回调未返回

Android Cast-媒体路由器回调未返回,android,casting,chromecast,mediarouter,Android,Casting,Chromecast,Mediarouter,我正在尝试自动发现演员设备。这基本上是我所看到的如何做到这一点的逐字逐句,但是我从来没有得到onRouteAdded或onRouteSelected的回调 我尝试更改使用的标志,但没有得到不同的结果。有时会添加路线,但从未选择 private void startSearchForDevicesAndCast() { MediaRouter router = MediaRouter.getInstance(this); int count = router.getRoutes(

我正在尝试自动发现演员设备。这基本上是我所看到的如何做到这一点的逐字逐句,但是我从来没有得到onRouteAdded或onRouteSelected的回调

我尝试更改使用的标志,但没有得到不同的结果。有时会添加路线,但从未选择

private void startSearchForDevicesAndCast() {
    MediaRouter router = MediaRouter.getInstance(this);

    int count = router.getRoutes().size();

    List<MediaRouter.RouteInfo> j = router.getRoutes();
    MediaRouteSelector selector = new MediaRouteSelector.Builder().addControlCategory(
            CastMediaControlIntent.categoryForCast(getString(R.string.app_id))).build();

    router.addCallback(selector, new MediaRouter.Callback() {
        @Override
        public void onRouteAdded(MediaRouter router, MediaRouter.RouteInfo route) {
            super.onRouteAdded(router, route);
            Log.i(TAG, "onRouteAdded: ");
            router.selectRoute(route);
        }

        @Override
        public void onRouteChanged(MediaRouter router, MediaRouter.RouteInfo route) {
            super.onRouteChanged(router, route);
            Log.i(TAG, "onRouteChanged: ");
        }

        @Override
        public void onRouteSelected(MediaRouter router, MediaRouter.RouteInfo route) {
            Log.i(TAG, "onRouteSelected: ");
            super.onRouteSelected(router, route);
        }
    }, MediaRouter.CALLBACK_FLAG_PERFORM_ACTIVE_SCAN);
}
private void startSearchForDevicesAndCast(){
MediaRouter=MediaRouter.getInstance(此);
int count=router.getRoutes().size();
List j=router.getRoutes();
MediaRouteSelector=新建MediaRouteSelector.Builder().addControlCategory(
CastMediaControlIntent.categoryForCast(getString(R.string.app_id))).build();
addCallback(选择器,新的MediaRouter.Callback(){
@凌驾
路由上的公共无效(MediaRouter路由器、MediaRouter.RouteInfo路由){
super.onrouteded(路由器,路由);
Log.i(标签“OnRouteded:”);
路由器。选择route(路由);
}
@凌驾
路由更改上的公共无效(MediaRouter路由器、MediaRouter.RouteInfo路由){
super.onRouteChanged(路由器,路由);
Log.i(标签“onRouteChanged:”);
}
@凌驾
已选择路由上的公共无效(MediaRouter路由器、MediaRouter.RouteInfo路由){
Log.i(标记“onRouteSelected:”);
super.OnRoute已选择(路由器、路由);
}
},MediaRouter.CALLBACK\u FLAG\u PERFORM\u ACTIVE\u SCAN);
}

我相信在你的情况下,你需要多做一点。根据应用程序的设置和结构以及其他一些因素,MediaRouter可能已经发现了您期望的路由。在这种情况下,您将不会得到onRouteAdded(),因为它已经存在。为了适应这种情况,一种方法是在调用
router.addCallback(..)
(正如您已经在做的那样)之后,通过调用
mMediaRouter.getRoutes()
,获取所有当前路由的列表,然后过滤列表中您感兴趣的应用程序id(使用已定义的相同的选择器,使用<代码>路由。Matter选择器(选择器)< /代码>,并将其视为初始发现的设备集。从此点开始,<<代码> OnRouTeAdDeD()/<代码>和代码> OnRouthErimeVDE()/Cuth>可以用来更新列表。,它有时包含有价值的信息;例如,当cast设备重新启动时,当它出现时,一开始可能没有正确的配置,但在它获得配置并更新某些字段后不久,然后,
onRouteChanged()
被调用,但在大多数情况下,您可能会忽略这一点,而只关注初始集和添加或删除的集。如果您想了解如何将其组合在一起,请注意,我上面概述的内容与MediaRouterChooserDialog内部的功能非常接近,因为它的源代码在Media Router v7 su中公开提供pport library,您可以查看一下,看看如何操作。

我相信在您的情况下,您需要做更多的工作。根据应用程序的设置和结构以及其他一些因素,您期望的路由可能已经被MediaRouter发现。在这种情况下,您将无法获得OnRoutedd()因为它已经存在。为了适应这种情况,一种方法是在调用
router.addCallback(..)
(正如您已经做的那样)之后,通过调用
mMediaRouter.getRoutes()
获取所有当前路由的列表,然后筛选您感兴趣的应用程序id的列表(使用已定义的相同的选择器,使用<代码>路由。Matter选择器(选择器)< /代码>,并将其视为初始发现的设备集。从此点开始,<<代码> OnRouTeAdDeD()/<代码>和代码> OnRouthErimeVDE()/Cuth>可以用来更新列表。,它有时包含有价值的信息;例如,当cast设备重新启动时,当它出现时,一开始可能没有正确的配置,但在它获得配置并更新某些字段后不久,然后,
onRouteChanged()
被调用,但在大多数情况下,您可能会忽略这一点,而只关注初始集和添加或删除的集。如果您想了解如何将其组合在一起,请注意,我上面概述的内容与MediaRouterChooserDialog内部的功能非常接近,因为它的源代码在Media Router v7 su中公开提供pport library,您可以查看并了解如何执行此操作。

您正在执行哪些操作,希望OnRoute被选中(被调用,但它没有发生?@AliNaddaf抱歉,我的问题措辞错误。我弄错了,没有收到onRouteAdded或onRouteSelected的回调。有时onRouteChanged返回,但我认为这只是因为它已经在以前的路线列表中,但路线似乎也从未改变过。B但是我确实看到了它的回调。好的,让我写下步骤;因为它有点长,我将写它作为一个答案,而不是一个评论。你正在采取什么行动,你希望onRouteSelected被选中(被调用,但它没有发生?@AliNaddaf抱歉,我的问题措辞错误。我弄错了,没有收到onRouteAdded或onRouteSelected的回调。有时onRouteChanged返回,但我认为这只是因为它已经在以前的路线列表中,但路线似乎也从未改变过。B但是我确实看到了它的回调。好吧,让我写下步骤;因为它有点长,我将把它作为一个答案而不是一个注释来写。