首页 > 解决方案 > MediaRouteButton 在 Fragment 中未激活

问题描述

我使用按钮android.support.v7.app.MediaRouteButton在我的应用程序中的活动 xml 和带有视频播放器的片段 xml 中启动 chromecast。

为了初始化投射按钮,我使用下一个代码:

private void setupChromeCast() {
        try {
            CastButtonFactory.setUpMediaRouteButton(getActivity(), castButton);
            castContext = CastContext.getSharedInstance(getActivity());
            castSession = castContext.getSessionManager().getCurrentCastSession();
            onCastStateChanged(castContext.getCastState());
            castSessionManager = new CastSessionManager(this);
            isChromeCastAvailable = true;
        } catch (Exception e) {
            isChromeCastAvailable = false;
        }
    }

它在活动中运行良好。我的意思是,当 chromecast 设备靠近时,我的 MediaRouteButton 会变为活动状态,我可以按下它。但是当这个 Button 在 Fragment 上时,它不会变为活动状态。并回调

   @Override
    public void onCastStateChanged(int state) 

不打电话。那么,如何修复这个错误呢?还有一个有趣的时刻:当我在片段中时,按钮不活动,但是当我将我的应用程序隐藏到后台,然后打开到前台时,我的 mediaroutebutton 变为活动状态。它太奇怪了。

标签: androidchromecast

解决方案


在您的活动中,初始化Cast

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    CastContext.getSharedInstance(this);
}

然后在您的片段中,您可以掌握Cast上下文:

@Override
public void onResume() {
    super.onResume();

    CastContext cc = CastContext.getSharedInstance();
    cc.addCastStateListener(this);
    cc.getSessionManager().addSessionManagerListener(
        this, CastSession.class);
}

已通过 Cast 版本验证18.1.0


推荐阅读