2015-04-22 2 views
0

При запуске операции, которая имеет MediaRouteButton, реализованную в соответствии с документами CastCompanionLibrary, кнопка не отображается, даже если в сети есть устройства Chromecast. (Обратите внимание, что MediaRouteButton здесь не находится в ActionBar, в действии, о котором мы говорим, фактически нет ActionBar, но он расширяет ActionBarActivity. Другие действия в нашем приложении включают кнопку Cast, введенную в панель действий в соответствии с документами, которые ведут себя правильно, когда в сети есть устройства Chromecast.)CastCompanionLibrary, обнаруживающий присутствие устройств Chromecast в сети

Мы заметили, что onCastAvailabilityChanged (а также onCastDeviceDetected) в VideoCastConsumer не вызывался. Мы проследили код и обнаружили, что onRouteAdded в /cast/CastMediaRouterCallback.java не вызывается, когда начинается действие.

В нашей деятельности мы создаем потребителя в onResume

@Override 
    protected void onResume() { 
     mCastManager = VideoCastManager.getInstance(); 
     if (mCastManager != null) { 
      mVideoCastConsumer = new VideoCastConsumerImpl() { 
       ..... 
       @Override 
       public void onCastAvailabilityChanged(boolean castPresent) { 
        mMediaRouteButton.setVisibility(castPresent ? View.VISIBLE : View.GONE); 
       } 
       ..... 
      } 
      mCastManager.incrementUiCounter(); 
      mCastManager.addVideoCastConsumer(mVideoCastConsumer); 
     } 
    ….. 

и сделать decrementUiCounter и удалить videoCastConsumer от менеджера в OnPause, как состояние DOCS реализации.

Тем не менее мы наблюдаем, что странно, onCastAvailabilityChanged и onCastDeviceDetected обратных вызовов всегда получить запускаемые после того как мы фон и передний план приложения. Любые идеи, почему это происходит? Есть ли способ воспроизвести это поведение для загрузки активности или, по крайней мере, в onResume/onPause?

EDIT: Следует упомянуть, что мы пытались вызвать mCastManager.startCastDiscovery, но обратные вызовы не вызывались до тех пор, пока мы снова не встали на задний план/переднем плане.

ответ

2

Есть две вещи, которые должны произойти: (1) приложения должны регистрироваться, чтобы получать уведомления, когда происходит изменение доступности маршрутов, и (2) они должны иметь возможность получать текущее состояние, то есть видеть, в любой момент есть какой-либо маршрут. Затем в каждом действии, в котором есть MediaRouterButton, должны использоваться оба из них; сначала зарегистрируйте обратный вызов, а затем сделайте прямой вызов, чтобы узнать, есть ли какой-либо маршрут или нет. Это установит ток состояния при запуске, и обратный вызов будет поддерживать текущее состояние с изменениями.

Я делаю небольшие изменения в этой области в CCL в ближайшее время, чтобы сделать эти два шага более надежными, поэтому, если вы можете подождать несколько дней, вы сможете увидеть обновленную версию; если вы не можете, то вам, возможно, придется немного поработать на вашей стороне.

Обновление: в CCL v2.0.1 были внесены некоторые изменения, чтобы сделать этот процесс более надежным; вам в основном нужно зарегистрироваться на обратный вызов onCastAvailabilityChanged(), а также когда вы запустите операцию с кнопкой, вызовите VideoCastManager.isAnyRouteAvailable(), чтобы установить начальную видимость кнопки трансляции.

0

У меня есть решение для меня: позвоните по телефону mCastManager.stopCastDiscovery(); по адресу onCreate() Acitivity.

stopCastDiscovery() удаляет обратный вызов mediaroute. Это причина? (● - ●)

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