2016-11-27 48 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支持庫中公開使用,您可以查看並查看如何做到這一點。