MediaRouteButton在Fragment中未激活

时间:2018-11-15 11:08:03

标签: android chromecast

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

要初始化投射按钮,请使用以下代码:

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变为活动状态,我可以按它。但是,当此按钮位于“片段”上时,它不会变为活动状态。和回调

   @Override
    public void onCastStateChanged(int state) 

不打来。那么,如何解决此错误?有一个有趣的时刻:当我处于片段状态时,按钮不处于活动状态,但是当我将应用程序隐藏到背景中然后又打开到前景中时,我的mediaroutebutton处于活动状态。真奇怪。

3 个答案:

答案 0 :(得分:1)

在您的活动中,初始化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验证。

答案 1 :(得分:0)

当选择默认路线或当前 所选路线 public override Task WriteResponseBodyAsync(OutputFormatterWriteContext context) { // Want a model from my querystring here } 不匹配时,该按钮将出现处于非活动状态,表明该应用程序未连接到其要使用的路由。 如果没有非默认路由与选择器匹配,并且活动扫描无法发现任何匹配的路由,则该按钮被禁用并且无法单击。您可以检查documentation以获得更多信息。

答案 2 :(得分:0)

来自示例文档:

为了集成Google Cast功能,“活动”需要从AppCompatActivity或其父级FragmentActivity继承。存在此限制,因为我们需要添加MediaRouteButton(在MediaRouter中提供)支持库)作为MediaRouteActionProvider,并且只有在活动是从上述类继承的情况下,这才起作用。”

您确定您已继承FragmentActivity或AppCompatActivity吗? 如果您可以使用它,请告诉我,我也希望它也可以这样使用。

相关问题