通过 Cast.CastApi.sendMessage 向 Chromecast 默认媒体接收器发送啥有效负载
Posted
技术标签:
【中文标题】通过 Cast.CastApi.sendMessage 向 Chromecast 默认媒体接收器发送啥有效负载【英文标题】:What Payload to send to the Chromecast Default Media Receiver via Cast.CastApi.sendMessage通过 Cast.CastApi.sendMessage 向 Chromecast 默认媒体接收器发送什么有效负载 【发布时间】:2014-05-01 21:09:19 【问题描述】:我一直在尝试构建一个小测试应用程序,将数据从 android 应用程序(发送方)发送到我的 chromecast。我正在使用默认媒体接收器来避免在学习期间支付注册费用。
所有代码都在服务中实现,接收器已找到并准备就绪,但我不知道如何格式化有效负载以实际让媒体接收器执行任何操作(例如显示图像)
这里有一些代码(如果需要更多,我很乐意发布)。 onConnected() 方法被调用并正常运行,接收器已连接并准备就绪,显示 chromecast 符号但未显示我发送 URL 的图片。
private class ConnectionCallbacks implements GoogleApiClient.ConnectionCallbacks
@Override
public void onConnected(Bundle bundle)
Log.d(TAG, "on connected for callback");
Cast.CastApi.launchApplication(mApiClient,
CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID, false)
.setResultCallback(new ResultCallback<Cast.ApplicationConnectionResult>()
@Override
public void onResult(Cast.ApplicationConnectionResult result)
Log.d(TAG, "OnResultCallback... ");
Status status = result.getStatus();
Log.d(TAG, "ApplicationConnectionResultCallback.onResult: statusCode" + status.getStatusCode());
if (status.isSuccess())
mApplicationStarted=true;
ApplicationMetadata applicationMetadata = result.getApplicationMetadata();
mSessionId = result.getSessionId();
String applicationStatus = result.getApplicationStatus();
boolean wasLaunched = result.getWasLaunched();
Log.d(TAG, mSessionId+" "+applicationStatus);
try
Cast.CastApi.sendMessage(mApiClient, "urn:x-cast:com.google.cast.media",
"http://www.randomwebsite.com/images/head.jpg")
.setResultCallback(new ResultCallback<Status>()
@Override
public void onResult(Status result)
if (!result.isSuccess())
Log.e(TAG, "Sending message failed");
);
catch(Exception e)
Log.e(TAG, "Sending message to chromecast failed... hard.");
);
@Override
public void onConnectionSuspended(int i)
Log.d(TAG, "on connection suspended for callback");
这段代码和大部分代码都类似于 google 的 https://github.com/googlecast/CastHelloText-android 示例。
我的问题,我认为是Cast.CastApi.sendMessage(mApiClient, "urn:x-cast:com.google.cast.media", "http://www.randomwebsite.com/images/head.jpg")
行,尤其是第三个参数,我怀疑它的格式不是默认媒体接收器期望数据的方式。但是我找不到任何关于此的工作示例。
那么,如何获得一个使用默认媒体接收器运行的工作示例?
【问题讨论】:
【参考方案1】:如果您想发送自己的消息(非媒体),您应该使用自己的命名空间创建自定义接收器。 Default Receiver/Styled Receiver 只理解媒体命名空间,并且要使用该命名空间,不要使用 sendMessage;使用 RemoteMediaPlayer 发送常见操作,例如播放/暂停/停止/搜索/...我们的 GitHub 存储库中有一些示例。
【讨论】:
嗯,很顺利。谢谢。我有两个问题:a) 使用 sendMessage() 会做什么?还是仅与自定义接收器相关? b) com.google.android.gms.common.api.Status 有一个 getStatusCode() 方法,它返回一个 int。但是,我找不到有关它可能返回的整数及其含义的文档。是否有这方面的文档。无论如何,感谢您的帮助。 当你有一个自定义的命名空间时使用 sendMessage,它应该伴随一个自定义的接收者。至于您的第二个问题,您可能会觉得这很有帮助:developer.android.com/reference/com/google/android/gms/common/…以上是关于通过 Cast.CastApi.sendMessage 向 Chromecast 默认媒体接收器发送啥有效负载的主要内容,如果未能解决你的问题,请参考以下文章
java是通过值传递,也就是通过拷贝传递——通过方法操作不同类型的变量加深理解