【发布时间】:2020-06-24 02:04:51
【问题描述】:
我正在为现有的 Android 应用添加 Chromecast 支持。我的应用应检测投射状态并相应地更改其部分显示。
我当前的代码可以正常工作,只是它在一种特定情况下错误地检测到强制转换状态:
- 有可用的投射设备,并且应用程序已关闭(不在 背景)。
- 用户打开应用程序。
- 我的应用检测到的投射状态应该是 NOT_CONNECTED,但实际上是 NO_DEVICES_AVAILABLE。
- 等待几秒钟后,施法状态仍然错误。
- 将应用程序置于后台并再次将其置于前台后,投射状态正确。
我相信我的问题是由 Google Cast 的documented behavior 引起的:
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。
即使没有后台,我的应用如何才能检测到投射状态?如果没有办法做到这一点,那么在应用程序被后台处理之前,是否不可能从任何应用程序进行投射?
【问题讨论】:
标签: android chromecast