当启动具有根据MediaRouteButton文档实现的CastCompanionLibrary的活动时,即使网络中有Chromecast设备,按钮也不会显示。(注意这里的MediaRouteButton不在ActionBar中;我们在这里讨论的活动实际上没有ActionBar,但它扩展了ActionBarActivity。我们应用程序中的其他活动根据文档将Cast按钮实现到Action中,当网络中有Chromecast设备时,该按钮的行为是正确的。)
我们观察到onCastAvailabilityChanged (以及onCastDeviceDetected)在VideoCastConsumer中没有被调用。我们跟踪了代码,发现活动开始时没有调用/cast/CastMediaRouterCallback.java中的onRouteAdded。
在我们的活动中,我们在onResume中创建了使用者
@Override
protected void onResume() {
mCastManager = VideoCastManager.getInstance();
if (mCastManager != null) {
mVideoCastConsumer = new VideoCastConsumerImpl() {
.....
@Override
public void onCastAvailabilityChanged(boolean castPresent) {
mMediaRouteButton.setVisibility(castPresent ? View.VISIBLE : View.GONE);
}
.....
}
mCastManager.incrementUiCounter();
mCastManager.addVideoCastConsumer(mVideoCastConsumer);
}
…..并执行decrementUiCounter并从onPause中的管理器中删除videoCastConsumer,作为实现文档状态。
然而,我们确实观察到,奇怪的是,onCastAvailabilityChanged和onCastDeviceDetected回调总是在后台和前台应用程序之后触发。,你知道为什么会这样吗?是否有办法复制这种行为在活动负载上发生,或者至少在onResume/onPause中发生?
编辑:值得一提的是,我们尝试过调用mCastManager.startCastDiscovery,但是在我们再次备份/预见之前,回调才被调用。
发布于 2015-04-24 16:56:34
有两件事需要发生:(1)当路由的可用性发生变化时,应用程序应当注册,以便得到通知;(2)它们应该能够得到当前的状态,即查看当时是否有可用的路由。然后,在每个具有MediaRouterButton的活动中,都应该使用这两种方法;首先注册回调,然后直接调用,看看是否有可用的路由。这将在启动时设置状态电流,回调使状态电流保持不变。
我正在对CCL中的这个领域做一些小的修改,以使这两个步骤更加健壮,因此如果您可以等待几天,您应该能够看到更新的版本;如果不能,那么您可能需要在您的方面做一些工作。
更新:在CCLv2.0.1中,进行了一些更改以使此过程更加健壮;您基本上需要向回调onCastAvailabilityChanged()注册,并且当您启动带有按钮的活动时,请调用VideoCastManager.isAnyRouteAvailable()设置强制转换按钮的初始可见性。
发布于 2015-05-14 02:37:17
我有一个适合我的解决方案:先打电话给mCastManager.stopCastDiscovery(); on Acitivity的onCreate()。
stopCastDiscovery()删除媒体回调。这就是原因吗?(-)
https://stackoverflow.com/questions/29809210
复制相似问题