Я добавляю поддержку Chromecast в существующее приложение Android. Мое приложение должно определить состояние приведения и соответственно изменить часть его отображения.
Мой текущий код работает, за исключением того, что он неправильно определяет состояние приведения в одном указанном c случае:
- Доступно литое устройство, и приложение закрыто (не в фоновом режиме).
- Пользователь открывает приложение.
- Состояние приведения, обнаруженное моим приложением , должно быть NOT_CONNECTED, но на самом деле это NO_DEVICES_AVAILABLE.
- После нескольких секунд ожидания состояние каста все еще не соответствует действительности.
- После создания фонового приложения и повторного наложения на него состояние приведения будет правильным.
Я полагаю, что моя проблема вызвана задокументированным поведением Google Cast :
CastContext содержит внутреннюю ссылку на MediaRouter, а будет запустить процесс обнаружения, когда приложение отправителя выходит на передний план , и остановить, когда приложение отправителя входит в фон.
При запуске я регистрирую прослушиватель состояния приведения и также проверяю состояние приведения:
CastHelper {
private val context: CastContext = CastContext.getSharedInstance(activity).apply {
addCastStateListener(this@CastHelper)
}
val castState = context.castState
override fun onCastStateChanged(p0: Int) {
println("cast state change detected: new state is $castState")
// ^ this prints correctly, except during steps 2-4 when it never prints at all
}
}
Я подумал, что проблема может быть в прослушивателе состояния приведения, поэтому я попытался вручную проверять состояние приведения каждую секунду. Ничего не изменилось; castState
по-прежнему NO_DEVICES_AVAILABLE
, когда должно быть NOT_CONNECTED
.
Как мое приложение может обнаружить состояние приведения, даже если оно не было задокументировано? Если нет способа сделать это, то невозможно ли преобразование из какого-либо приложения до тех пор, пока оно не станет фоновым?