我正在尝试将Chromecast集成到我们的应用中,并且在加入已经运行的应用程序时遇到了从接收方获取数据的问题。
首次启动应用程序时,我使用
将元素播放器设置为元日期 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上工作了,所以我知道它的可能性。
在我看来,您正在扩展RemoteMediaPlayer
的功能并覆盖其sendMessage()
。实际上,对于您的任务,这实际上不建议。如果要在媒体上发送其他数据,则需要使用,例如,各种呼叫和对象中可用的customData
字段。例如,MediaInfo
对象可以具有customData
,您可以在此处添加这些其他字段,因此可以像load(), play(), pause()
这样的许多控制命令,....如果您选择覆盖remotemediaplayer的sendMessage()
,则需要处理接收者上的其他功能