2016-11-27 5 views
0

Я пытаюсь автоматически обнаружить Cast устройства. Это в основном дословно то, что я видел для этого, но никогда не получаю обратный вызов для onRouteAdded или onRouteSelected.Обратный звонок для Android Cast - Media Router не возвращается

Я попытался изменить, какие флаги используются, но не получил разных результатов. Иногда маршрут будет добавлен, но никогда не будет выбран.

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(), а затем отфильтруйте список для интересующего вас идентификатора приложения (используя тот же селектор, что и вы определили и использовали route.matchesSelector(selector)) и рассмотрим это как ваш первоначальный набор обнаруженных устройств. С этого момента можно обновить список onRouteAdded() и onRouteRemoved(). Что касается onRouteChanged(), это иногда имеет ценную информацию; например, когда перезагружается литое устройство, и когда оно появляется, в самом начале оно может не иметь правильной конфигурации, но вскоре после его получения и обновления определенных полей, а затем вызывается onRouteChanged(), но в большинстве случаев вы можете игнорировать это и просто сосредоточиться на исходном наборе и те, которые добавляются или удаляются. Если вы хотите посмотреть, как это можно объединить, обратите внимание, что то, что я изложил выше, очень близко к тому, что делает MediaRouterChooserDialog внутри, и поскольку исходный код этого файла открыто доступен в библиотеке поддержки Media Router v7, вы можете взглянуть и посмотреть как это можно сделать.

 Смежные вопросы

  • Нет связанных вопросов^_^