Android 如何加入Chromcast设备上运行的活动会话

Android 如何加入Chromcast设备上运行的活动会话,android,google-cast,chromecast,Android,Google Cast,Chromecast,我必须给用户(用户A和B)和一个Chromecast设备(C1)。 用户B在C1上启动流。 用户A连接到C1 现在,用户A应该能够控制C1上运行的流。但每次我想启动会话时,C1上的运行流都会被关闭,接收器应用程序也会重新启动 有没有加入活动会话的方法?或者这是一项必须由Chromecast设备上运行的web应用程序完成的工作 编辑: 我的发件人应用程序是一个本地Android应用程序 谢谢 您应该看看TictaToe应用程序。我认为两个玩家可以加入同一个游戏: 希望这有帮助。 JN您使用的是哪

我必须给用户(用户A和B)和一个Chromecast设备(C1)。 用户B在C1上启动流。 用户A连接到C1

现在,用户A应该能够控制C1上运行的流。但每次我想启动会话时,C1上的运行流都会被关闭,接收器应用程序也会重新启动

有没有加入活动会话的方法?或者这是一项必须由Chromecast设备上运行的web应用程序完成的工作

编辑: 我的发件人应用程序是一个本地Android应用程序
谢谢

您应该看看TictaToe应用程序。我认为两个玩家可以加入同一个游戏:

希望这有帮助。
JN

您使用的是哪种发送方?它是本机应用程序(即在移动设备上使用Android或iOs SDK)还是发送方是chrome应用程序?

在接收方上,您创建接收方对象和ChannelHandler。使用接收器生成ChannelFactory,然后将其传递给ChannelHandler。ChannelHandler现在处理接收器上通道的创建。您需要将EventListener添加到处理程序以侦听消息。根据这些信息,你可以做各种事情

receiver = new cast.receiver.Receiver(YOUR_APP_ID, [YOUR_PROTOCOL], "", 5);
var dashHandler = new cast.receiver.ChannelHandler(YOUR_PROTOCOL);
dashHandler.addChannelFactory(receiver.createChannelFactory(YOUR_PROTOCOL));
dashHandler.addEventListener(cast.receiver.Channel.EventType.MESSAGE, onMessage.bind(this));
receiver.start();

...

onMessage = function (e) {
    var message = e.message;
    switch (message.type) {
       ...
    }
}
在发送方上,创建会话后,您需要向接收方发送检查状态消息,以查看是否已连接频道。您可以通过MessageStream执行此操作,并且您的接收者需要以消息流更新其状态的方式进行响应。您可以检查该状态以查看是否存在频道。如果有,您可以开始收听接收器的更新。如果没有,您可以向接收者发送加载事件以启动活动

MediaProtocolCommand cmd = mMessageStream.requestStatus();
cmd.setListener(new MediaProtocolCommand.Listener() {
    @Override
    public void onCompleted(MediaProtocolCommand mPCommand) {
        if (mMessageStream.getState() == 'channelsExist') {
            //Start New Activity
       } else {
            //Join Existing Activity
       }
    @Override
    public void onCancelled(MediaProtocolCommand mPCommand) {
    }
});

这是一种模糊的回答,但如果我知道你想做什么,它可能会更具体。我的应用程序使用谷歌的RAMP协议播放视频,因此我的MessageStream和它的所有消息都已经定义好了。如果你正在做一些不同的事情,你需要创建自己的消息流。

很抱歉回答得太晚,但我自己想出来了:这一点都不复杂

我启动了一个这样的应用程序

  try {
     mSession.startSession(applicationName,applicationArgs);
  } catch (IllegalStateException e) {
     Log.e(getClass().getSimpleName(), e.getMessage(), e);
  } catch (IOException e) {
     Log.e(getClass().getSimpleName(), e.getMessage(), e);
  }
但似乎根本不需要MimeData应用程序args。通过删除参数并像下面那样启动会话,它工作得非常好

  try {
     mSession.startSession(applicationName);
  } catch (IllegalStateException e) {
     Log.e(getClass().getSimpleName(), e.getMessage(), e);
  } catch (IOException e) {
     Log.e(getClass().getSimpleName(), e.getMessage(), e);
  }

我希望这对你也有用

我以前查过这个,但是我没有发现任何不同。。。但是谢谢!哦,对不起,我使用本机android应用程序作为发件人应用程序。我要求提供发件人类型的原因是当前的Chrome API不支持多个并发连接。由于您回答说您使用的是Android SDK,请分享您的一些代码,以便我们可以提出一些建议,否则很难看出哪里出了问题;如果我们能同时看到收件人和发件人代码,那就太好了。顺便问一下,为什么我的问题被否决了?我不能发布接收器应用程序的代码,因为它不是我开发的。我的发件人应用程序与谷歌发布的示例应用程序和教程没有太大区别。所以我认为必须做一些“特别”的事情。顺便说一句,我没有否决你的答案:你指的是哪个教程?您可以打开SDK登录,并获取更多信息;为此,请在本页底部查找“在SDK中启用日志记录”: