我試圖將媒體控件添加到我的應用程序,但無法讓RemoteMediaPlayer發送命令。 視頻開始播放,但後來我無法控制它。 這是我使用的代碼:Chromecast Android SDK:RemoteMediaPlayer在嘗試控制時始終以IllegalStateException結尾
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。也許這也與我遇到的同一問題有關。
在此先感謝。
謝謝Ali Naddaf,但正如我所提到的,我的回調沒有被調用。上面的代碼是否足以接收回調?代碼與此處非常相似:https://developers.google.com/cast/docs/android_sender我在連接到Chromecast後調用了此應用,並且我的接收器應用已啓動並準備播放。這是在實現ResultCallback的類中的onResult方法中。希望澄清它。 –
joaomgcd
您正在混合兩種不同的回調;您在上面顯示的PendingResult回調僅僅是從框架告訴您命令已發送。我正在談論的另一個回調是使用mRemoteMediaPlayer.setOnStatusUpdatedListener(..)和mRemoteMediaPlayer.setOnMetadataUpdatedListener(..)設置的,並且它們在接收端發送更新後的播放器狀態或元數據。 –
謝謝,這些回調工作。 :)但原來的問題仍然存在。在嘗試執行mRemoteMediaPlayer.pause(apiClient)時,我總是得到「沒有當前媒體會話」;還有什麼我錯過了這個工作?何時可以使用遠程播放器控件?我是否需要等待某個狀態更新? – joaomgcd