Android chromecast:如何在应用程序启动之前检测应用程序的演员状态?

Android chromecast:如何在应用程序启动之前检测应用程序的演员状态?,android,chromecast,Android,Chromecast,我正在将Chromecast支持添加到现有的Android应用程序中。我的应用程序应该检测演员状态,并相应地改变部分显示 我当前的代码可以正常工作,但在一个特定情况下,它会错误地检测强制转换状态: 演员阵容设备可用,且应用程序已关闭(不在 背景) 用户打开应用程序 我的应用程序检测到的演员状态应该没有连接,但实际上没有可用的设备 等待几秒钟后,强制转换状态仍然错误 在将应用程序背景化并再次前景化后,演员阵容状态是正确的 我相信我的问题是由Google Cast造成的: CastContext在内

我正在将Chromecast支持添加到现有的Android应用程序中。我的应用程序应该检测演员状态,并相应地改变部分显示

我当前的代码可以正常工作,但在一个特定情况下,它会错误地检测强制转换状态:

  • 演员阵容设备可用,且应用程序已关闭(不在 背景)
  • 用户打开应用程序
  • 我的应用程序检测到的演员状态应该没有连接,但实际上没有可用的设备
  • 等待几秒钟后,强制转换状态仍然错误
  • 在将应用程序背景化并再次前景化后,演员阵容状态是正确的 我相信我的问题是由Google Cast造成的:

    CastContext在内部保存对MediaRouter的引用,将在发送方应用进入前台时启动发现过程,并在发送方应用进入后台时停止

    启动时,我注册一个强制转换状态侦听器,并检查强制转换状态:

    CastHelper{
    私有val上下文:CastContext=CastContext.getSharedInstance(活动).apply{
    addCastStateListener(this@CastHelper)
    }
    val castState=context.castState
    覆盖onCastStateChanged(p0:Int){
    println(“检测到强制转换状态更改:新状态为$castState”)
    //^此选项可以正确打印,但在步骤2-4中,它根本不会打印
    }
    }
    
    我认为可能是强制转换状态侦听器出了问题,所以我尝试每秒手动检查强制转换状态。没有任何变化;
    castState
    在应
    未连接时仍然
    没有可用的设备


    我的应用程序如何能够检测到演员状态,即使它没有背景?如果没有办法做到这一点,那么在应用程序被背景化之前,从任何应用程序进行强制转换都是不可能的吗?

    解决了!问题是CastHelper在应用程序启动后很长一段时间内被延迟初始化。CastHelper在初始化时只将自身添加为CastStateListener,所以在此之前我们没有检测到强制转换状态的更改

    为了修复它,我在CastHelper上创建了一个no-op方法:

    CastHelper{
    ...
    fun onCreate(){}
    }
    
    并在我的应用程序活动的onCreate方法中调用它:

    class AppActivity:FragmentActivity(){
    创建公共覆盖乐趣(savedInstanceState:Bundle?){
    ...
    CastHelper.onCreate()
    }
    

    这将强制CastHelper在应用程序运行时进行初始化,并允许应用程序正确检测强制转换状态。

    已解决!问题在于CastHelper在应用程序启动后很长一段时间才进行了延迟初始化。CastHelper在初始化时仅将自身添加为CastStateListener,因此直到那么

    为了修复它,我在CastHelper上创建了一个no-op方法:

    CastHelper{
    ...
    fun onCreate(){}
    }
    
    并在我的应用程序活动的onCreate方法中调用它:

    class AppActivity:FragmentActivity(){
    创建公共覆盖乐趣(savedInstanceState:Bundle?){
    ...
    CastHelper.onCreate()
    }
    
    这将强制CastHelper在应用程序运行时进行初始化,并允许应用程序正确检测强制转换状态