2016-11-27 72 views
0

我试图自动发现投射设备。这基本上是我见过的关于如何做到这一点的逐字记录,但是我从来没有得到onRouteAdded或onRouteSelected的回调。Android Cast - 不返回媒体路由器回调

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

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); 
} 
+0

你采取了什么行动,你期望的onRouteSelected(被称为,并没有发生? –

+0

@AliNaddaf抱歉,我的问题措辞错误。我错了,并没有得到onRouteAdded或onRouteSelected的回调。有时候onRouteChanged会返回,但我认为这只是因为它已经在前一次的路由列表中,但是路由从来没有出现过变化,但是我确实看到了它的回调。 – Lucas

+0

好的,让我写下步骤;因为它有点长,我会写它作为答案而不是评论。 –

回答

0

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