Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从接收器获取自定义数据_Java_Google Play Services_Chromecast - Fatal编程技术网

Java 如何从接收器获取自定义数据

Java 如何从接收器获取自定义数据,java,google-play-services,chromecast,Java,Google Play Services,Chromecast,我试图将Chromecast集成到我们的应用程序中,但在加入已经运行的应用程序时,我遇到了从接收器获取数据的问题 第一次启动应用程序时,我使用RemoteMediaPlayer设置元日期 public class CastMessageStream extends RemoteMediaPlayer { public void setMetadata(GoogleApiClient apiClient, CastingObject castingObject, String s

我试图将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
            ....
        }
    });
Cast.CastApi.launchApplication(GoogleAppClient,APP_ID).setResultCallback(新的ResultCallback(){
@凌驾
public void onResult(Cast.ApplicationConnectionResult ApplicationConnectionResult){
mMessageStream=new CastMessageStream();
MediaInfo MediaInfo=mMessageStream.getMediaInfo();
MediaStatus MediaStatus=mMessageStream.getMediaStatus();
JSONObject JSONObject=mediaInfo.getCustomData();//返回null
MediaMetadata=mediaInfo.getMetadata();//返回null
....
}
});

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

在我看来,您正在扩展
RemoteMediaPlayer
的功能,并覆盖其
sendMessage()
。事实上,这并不适合你所想的任务;如果要使用媒体发送附加数据,需要使用各种调用和对象中可用的
customData
字段。例如,
MediaInfo
对象可以具有
customData
,您可以在其中添加这些附加字段,许多控制命令,如
load()、play()、pause()
。。。。如果您选择覆盖RemoteMediaPlayer的
sendMessage()
,则还需要处理接收器端的附加功能。

什么是mMessageStream?(b.t.w.,您可能希望将onResult()中的代码包装成一个条件语句,只有在applicationConnectionResult.getStatus().isSuccess()为true时才能执行)@AliNaddaf我已经包装好了,但为了简单起见,我在问题中去掉了它。我编辑了这个问题,mMessageStream是一个CastMessageStream,它扩展了RemoteMediaPlayeral。很抱歉造成混淆。RemoteMediaPlayer没有sendMessage方法。这是我自己的方法,我刚刚用它更新了问题。我使用Cast.CastApi.sendMessage(..)发送自定义消息。我是否错误地认为接收者应该能够将它发送的自定义数据发送给我,而不在接收者端进行任何其他实现?看起来您使用的是自定义名称空间(我不知道代码中的名称空间是什么,但我猜这是一个自定义值)。如果是这样,您可以自己在接收器上执行您想要执行的操作(例如,当您收到该操作时,将其广播给所有连接的发送者)。自定义名称空间可以让您定义它们的含义,并为您提供一种通信方式,框架只是发送消息,需要做什么取决于您。为什么不使用我建议的customData(比如在MediaInfo上定义的)?如果您使用它,那么框架可以为您处理其余的部分。