通过 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 默认媒体接收器发送啥有效负载的主要内容,如果未能解决你的问题,请参考以下文章

下拉框多选框单选框 通过TagHelper绑定数据

酶:测试孩子通过安装渲染失败,但通过浅时通过

java是通过值传递,也就是通过拷贝传递——通过方法操作不同类型的变量加深理解

通过代码进行 Spring 配置与通过注释进行配置

如何理解“不要通过共享内存来通信,而应该通过通信来共享内存”?

通过邮递员通过 API 使用 Rails 主动存储上传文件(.pdf、.jpg 等)? (不通过 Rails 视图)