【问题标题】:CastCompanionLibrary detecting presence of Chromecast devices on networkCastCompanionLibrary 检测网络上是否存在 Chromecast 设备
【发布时间】: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


    【解决方案1】:

    有两件事需要发生:(1) 应用程序应该注册自己,以便在路由可用性发生变化时得到通知;(2) 他们应该能够获得当前状态,即查看是否存在在那一刻是否有任何可用的路线。然后在每个具有 MediaRouterButton 的活动中,都应该使用这两个;首先注册回调,然后直接调用,看看是否有可用的路由。这将在启动时将状态设置为当前状态,并且回调使状态保持最新状态。

    我很快会在 CCL 的这方面进行一些小改动,以使这两个步骤更加健壮,所以如果您可以等待几天,您应该能够看到更新的版本;如果你不能,那么你可能需要做一些工作。

    更新:在 CCL v2.0.1 中,进行了一些更改以使此过程更加健壮;您基本上需要注册回调onCastAvailabilityChanged(),并且当您启动具有该按钮的活动时,请调用VideoCastManager.isAnyRouteAvailable() 来设置投射按钮的初始可见性。

    【讨论】:

      【解决方案2】:

      我有一个适合我的解决方案:致电mCastManager.stopCastDiscovery(); 首先在 Acitivity 的 onCreate() 上。

      stopCastDiscovery() 删除了媒体路由回调。这是原因吗? (●-●)

      【讨论】:

        猜你喜欢
        • 2015-05-31
        • 1970-01-01
        • 1970-01-01
        • 2014-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-31
        相关资源
        最近更新 更多