Приложение Chromecast Sender не обнаруживает отключение/повторное подключение

Ранее я разработал приложение-отправитель для Android с предварительной версией SDK и обнаружил, что при включении или выключении Chromecast приложение очень быстро обнаруживало это и меняло состояние кнопки маршрутизации мультимедиа.

Однако с новым SDK, если Chromecast отключен, а приложение не подключено к нему, MediaRouter.Callback.onRouteUnselected() никогда не вызывается, а значок Cast остается видимым. В некоторых случаях, даже если приложение закрывается и снова открывается, onRouteAdded вызывается при запуске с подробностями о ранее подключенном Chromecast, даже если он больше не подключен и, следовательно, не в сети, что предполагает, что где-то есть какой-то кеш. .

Я замечаю это как в своем собственном приложении (которое использует сопутствующую библиотеку), так и в примере приложения CastVideos-android на github. Это устанавливает обратный вызов следующим образом:

mMediaRouter = MediaRouter.getInstance(context);
mMediaRouteSelector = new MediaRouteSelector.Builder().addControlCategory(
    CastMediaControlIntent.categoryForCast(mApplicationId)).build();

mMediaRouterCallback = new CastMediaRouterCallback(this, context);
mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback,
    MediaRouter.CALLBACK_FLAG_PERFORM_ACTIVE_SCAN);

Это приводит к довольно грубому взаимодействию с пользователем — можно ли как-то его улучшить? Возможно, какой-то флаг, который я могу передать, будет выполнять еще более активное сканирование, чем CALLBACK_FLAG_PERFORM_ACTIVE_SCAN, и, следовательно, обнаруживать Chromecast, которых больше нет в сети? Или, может быть, какой-то метод, который я могу использовать через определенные промежутки времени, чтобы снова сканировать и убедиться, что хромкаст все еще там? Я просмотрел API, но ничего не вижу.

РЕДАКТИРОВАТЬ: Что еще хуже, я также заметил, что если Chromecast отключен от сети, то вы пытаетесь выполнить кастинг к нему, он отключится (хорошо), но не обнаружит Chromecast, когда он снова подключен. Это верно, даже если вы получите выйти из приложения и снова запустить его.


person Alex Gilleran    schedule 03.03.2014    source источник
comment
Вы ожидаете, что многие пользователи отключат свой собственный Chromecast, затем намеренно попытаются использовать его, а затем не поймут, почему он не работает?   -  person ianhanniballake    schedule 03.03.2014
comment
Не исключено, что кто-то выдернет шнур, а затем попытается запустить трансляцию, прежде чем переключиться на канал Chromecast на телевизоре. Другая проблема заключается в том, что он делает живые демонстрации, в которых вы хотите одновременно продемонстрировать приложение Chromecast, а также фактически отключить его и передать его, что действительно нервирует.   -  person Alex Gilleran    schedule 03.03.2014
comment
Более того, если бы я случайно выдернул шнур из своего хромкаста и не мог видеть изображение, но все еще мог видеть кнопку трансляции в приложении-отправителе, я бы предположил, что хромкаст все еще включен, но что-то не так с соединением HDMI. . В конце концов я бы понял это, но это не здорово.   -  person Alex Gilleran    schedule 03.03.2014


Ответы (1)


Описанное вами поведение вызвано ошибкой в ​​SDK, которая будет устранена в следующем выпуске сервисов Google Play.

person Ali Naddaf    schedule 03.03.2014
comment
Есть ли аналогичная ошибка, означающая, что при отключении через приложение Sender Receiver не закрывается, несмотря на запуск кода разрыва? Я испытываю это совсем немного. - person Mr Pablo; 21.01.2015
comment
Что такое код разрыва? Если вы имеете в виду конкретный код, вам нужно четко понимать, что это такое. Кроме того, вы должны быть точны в отношении используемого приемника. Ваш вопрос полностью отличается от исходного сообщения здесь, поэтому вам нужно создать новое сообщение, а не задавать другой вопрос в комментариях. - person Ali Naddaf; 21.01.2015
comment
teardown() — это функция в примерах приложений Google Cast для Android. - person Mr Pablo; 22.01.2015