【问题标题】:How to get custom data from receiver如何从接收方获取自定义数据
【发布时间】:2014-04-08 06:37:19
【问题描述】:

我正在尝试将 Chromecast 集成到我们的应用程序中,但在加入已运行的应用程序时遇到了从接收器获取数据的问题。

第一次启动应用程序时,我使用 RemoteMediaPlayer 设置元日期

 public class CastMessageStream extends RemoteMediaPlayer {    
    public void setMetadata(GoogleApiClient apiClient, CastingObject castingObject, String seriesId, String description, String episodeNumber, String title) {
        JSONObject payload = _initJsonObject(COMMAND_KEY_SET_METADATA);
        try {
            payload.put(KEY_SUB_TITLE, castingObject.castingSubUrl);
            payload.put(KEY_TITLE, title);
            payload.put(KEY_SERIES_ID, seriesId);
            payload.put(KEY_EPISODE_NUMBER, episodeNumber);
            payload.put(KEY_DESCRIPTION, description);
            payload.put(KEY_VIDEO_HEADER, castingObject.description);
           sendMessage(apiClient, payload.toString());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * Send messages to the reciever using the NAMESPACE
 */
private final void sendMessage(GoogleApiClient apiClient, String message)
        throws IOException, IllegalArgumentException, IllegalStateException {
    Cast.CastApi.sendMessage(apiClient, NAMESPACE, message);
}

加入已运行应用程序的代码

 Cast.CastApi.launchApplication(googleApiClient, APP_ID).setResultCallback(new ResultCallback<Cast.ApplicationConnectionResult>() {
        @Override
        public void onResult(Cast.ApplicationConnectionResult applicationConnectionResult) {
            mMessageStream = new CastMessageStream();
            MediaInfo mediaInfo =  mMessageStream.getMediaInfo();
            MediaStatus mediaStatus = mMessageStream.getMediaStatus();
            JSONObject jsonObject = mediaInfo.getCustomData(); // Returns null
            MediaMetadata metadata = mediaInfo.getMetadata(); // Returns null
            ....
        }
    });

如何从接收方获取自定义信息。我让它在 iOS 上运行,所以我知道它是可能的。

【问题讨论】:

  • 什么是mMessageStream? (顺便说一句,您可能希望将代码包装在 onResult() 中的条件语句中,仅当 applicationConnectionResult.getStatus().isSuccess() 为真时才执行)
  • @AliNaddaf 我已经把它包装好了,但为了简单起见,我在问题中把它拿出来了。我编辑了这个问题,mMessageStream 是一个 CastMessageStream,它扩展了 RemoteMediaPlayer

标签: java google-play-services chromecast


【解决方案1】:

在我看来,您正在扩展RemoteMediaPlayer 的功能并覆盖其sendMessage()。这实际上不推荐用于您想到的任务;如果您想通过媒体发送其他数据,则需要使用例如在各种调用和对象中可用的customData 字段。例如,MediaInfo 对象可以有customData,您可以在那里添加这些附加字段,因此可以添加一些控制命令,如load(), play(), pause(),...。如果您选择覆盖 RemoteMediaPlayer 的sendMessage(),那么您需要处理接收端的附加功能。

【讨论】:

  • 阿里很抱歉造成混乱。 RemoteMediaPlayer 没有 sendMessage 方法。这是我自己的方法,我刚刚更新了问题。我使用 Cast.CastApi.sendMessage(..) 发送自定义消息。我认为接收方应该能够在接收方没有任何额外实现的情况下将其发送的自定义数据发回给我,我错了吗?
  • 看起来您正在使用自定义命名空间(我不知道代码中的 NAMESPACE 是什么,但我猜这是一个自定义值)。如果是这样,您可以自己在接收器上做您想做的事情(例如,当您收到它时,将其广播给所有连接的发送者)。自定义命名空间可让您定义它们的含义并为您提供一种沟通方式,框架只是发送消息,需要做什么取决于您。您为什么不使用我建议的 customData(例如在 MediaInfo 上定义)?如果你使用它,那么框架可以为你处理剩下的事情。
猜你喜欢
  • 1970-01-01
  • 2017-01-14
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 2013-07-07
  • 2022-01-05
  • 1970-01-01
相关资源
最近更新 更多