Chromecast Android SDK:在尝试控制时,RemoteMediaPlayer始终以IllegalStateException结尾

时间:2014-02-21 15:52:20

标签: android google-cast chromecast

我正在尝试向我的应用添加媒体控件,但我无法让RemoteMediaPlayer发送命令。 视频开始播放但我无法控制它。 这是我使用的代码:

RemoteMediaPlayer mRemoteMediaPlayer = new RemoteMediaPlayer();
                try {
    Cast.CastApi.setMessageReceivedCallbacks(apiClient, mRemoteMediaPlayer.getNamespace(), mRemoteMediaPlayer);

                        MediaMetadata mediaMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE);
                        JSONObject jsonExtra = new JSONObject();
                        mediaMetadata.putString(MediaMetadata.KEY_TITLE, "My video");

                        if (mediaType != null) {
                            jsonExtra.put("type", mediaType);
                        }
                        if ("audio".equals(mediaType)) {
                            mimeType = "audio/mp3";
                        }
                        com.google.android.gms.cast.MediaInfo.Builder builder = new MediaInfo.Builder(getUrl()).setContentType(mimeType).setMetadata(mediaMetadata).setCustomData(jsonExtra);
                        builder.setStreamType(MediaInfo.STREAM_TYPE_BUFFERED);

                        MediaInfo mediaInfo = builder.build();
                        mRemoteMediaPlayer.load(apiClient, mediaInfo, true, inititalTime).setResultCallback(new ResultCallback<RemoteMediaPlayer.MediaChannelResult>() {
                            @Override
                            public void onResult(MediaChannelResult result) {
                                if (result.getStatus().isSuccess()) {
                                    log(context, "Media loaded successfully");
                                }
                            }
                        });
                        Thread.sleep(5000);
                         mRemoteMediaPlayer.pause(apiClient);
} catch (IllegalStateException e) {
                    log(context, "Problem occurred with media during loading " + e);
                } catch (IOException e) {
                    log(context, "Problem occurred with media during loading " + e);
                } catch (JSONException e) {
                    log(context, "Problem occurred with media during loading " + e);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

您可能会注意到,最后我等待5秒钟以确保视频正在播放,然后尝试暂停播放。 这总是会导致带有消息的IllegalStateException:

  

没有当前的媒体会话

我错过了什么吗? 我还注意到视频开始播放后从未调用ResultCallback。也许这也与我遇到的同一问题有关。

提前致谢。

2 个答案:

答案 0 :(得分:0)

目前尚不清楚何时运行此代码。不要像你那样设置睡眠;您必须在mRemoteMediaPlayer上注册回调,以便在远程播放器上的状态或元数据发生变化时收到通知。当状态改变监听器被调用时,通过调用mRemoteMediaPlayer.getMediaStatus().getPlayerState()并根据状态(无论是播放,缓冲,空闲,暂停)获取更新状态,做出适当的决定。在异步系统中,永远不要使用“sleep()”,总是挂钩回调。

答案 1 :(得分:-2)

您需要Android SDK中的google-play-services_lib库。

http://developer.android.com/google/play-services/setup.html

将google-play services_lib库项目复制到您的工作区(您的android地图项目所在的文件夹)。可以在以下路径中找到库项目。

/android-sdk-folder/extras/google/google_play_services/

将库项目导入您的eclipse

点击文件&gt;导入,选择 Android&gt;现有Android代码到Workspace 浏览工作区导入库项目。您可以检查它是否是库项目。右键单击库项目。转到属性。点击左侧面板上的Android。您将看到Is Library已选中。

右键单击您的Android项目转到属性。选择左侧的 Android 面板。 点击添加并浏览库项目。选择相同。单击确定并应用。