【问题标题】:Android Cast - Media Router callback not returningAndroid Cast - 媒体路由器回调未返回
【发布时间】:2017-04-11 00:39:33
【问题描述】:

我正在尝试自动发现 Cast 设备。这基本上是我所看到的如何做到这一点的逐字记录,但是我从来没有得到 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);
}

【问题讨论】:

  • 你正在采取什么行动,你希望 onRouteSelected( 被调用并且它没有发生?
  • @AliNaddaf 抱歉,我的问题措辞错误。我弄错了,没有得到 onRouteAdded 或 onRouteSelected 的回调。有时 onRouteChanged 会返回,但我认为这只是因为它已经在以前的路线列表中,但路线似乎也从未改变。但我确实看到了它的回调。
  • 好的,我把步骤写下来;由于它有点长,我将把它写成答案而不是评论。

标签: android casting chromecast mediarouter


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    相关资源
    最近更新 更多