通过Cast.CastApi.sendMessage发送给Chromecast默认媒体接收器的有效负载

时间:2014-05-01 21:09:19

标签: android chromecast

我一直在尝试构建一个小测试应用程序,将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 个答案:

答案 0 :(得分:0)

如果要发送自己的消息(非媒体),则应创建具有自己的命名空间的自定义接收器。默认接收器/样式接收器只能理解媒体命名空间并使用该命名空间,不要使用sendMessage;使用RemoteMediaPlayer发送常见的操作,如播放/暂停/停止/搜索/ ...我们的GitHub存储库中有一些示例。