【发布时间】:2015-06-30 19:09:39
【问题描述】:
根据 CastCompanionLibrary 文档启动具有 MediaRouteButton 实现的 Activity 时,即使网络中有 Chromecast 设备,该按钮也不会显示。 (注意这里的 MediaRouteButton 不在 ActionBar 中;我们在这里谈论的活动实际上没有 ActionBar,但它扩展了 ActionBarActivity。我们应用程序中的其他活动根据文档将 Cast Button 实现到 Action Bar 中,其行为当网络中有 Chromecast 设备时正确。)
我们观察到未调用 VideoCastConsumer 中的 onCastAvailabilityChanged(以及 onCastDeviceDetected)。我们跟踪代码,发现 /cast/CastMediaRouterCallback.java 中的 onRouteAdded 在 Activity 启动时没有被调用。
在我们的活动中,我们在 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);
}
…..
按照实现文档所述,在 onPause 中执行 decrementUiCounter 并从管理器中移除 videoCastConsumer。
然而,我们确实观察到奇怪的是 onCastAvailabilityChanged 和 onCastDeviceDetected 回调总是在我们将应用程序置于后台和前台之后触发。 任何想法为什么会发生这种情况?有没有办法在活动负载或至少在 onResume/onPause 中复制这种行为?
编辑:值得一提的是,我们尝试调用 mCastManager.startCastDiscovery,但直到我们再次后台/前台才调用回调。
【问题讨论】:
标签: android chromecast google-cast