Ранее я разработал приложение-отправитель для 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, когда он снова подключен. Это верно, даже если вы получите выйти из приложения и снова запустить его.