我正在尝试编写RemotePlaybackClient
示例应用,部分原因是the one published by Google crashes aapt
。
我可以RemotePlaybackClient
支持play()
,并在Chromecast上播放视频。
但是,当我拨打stop()
时,要停止播放视频,而Chromecast会停止播放(显示一个黑色屏幕,其中有一个投射图标居中),我传入的SessionActionCallback
stop()
不会调用onResult()
来电:
private void stop() {
logToTranscript(getActivity().getString(R.string.stop_requested));
SessionActionCallback stopCB=new SessionActionCallback() {
@Override
public void onResult(Bundle data, String sessionId,
MediaSessionStatus sessionStatus) {
logToTranscript(getActivity().getString(R.string.stopped));
isPlaying=false;
isPaused=false;
getActivity().supportInvalidateOptionsMenu();
endSession();
}
};
client.stop(null, stopCB);
}
如果我尝试pause()
,则会发生同样的事情 - 未调用传递给SessionActionCallback
的{{1}}。
The sample code published by Google表明应该调用这些回调,但是,我再也无法成功编译。
有谁知道pause()
在什么情况下不起作用,而SessionActionCallback
使用的ItemActionCallback
会工作?
更新
我已经提交了issue 66996和issue 67032,后者特别是我在这里看到的问题,因为我遇到了与官方示例应用程序相同的问题。
答案 0 :(得分:1)
我相信所有答案都取决于你如何建立联系。 因为在谷歌代码中,代码说你所做的客户不会离开会话而不应该为空。
if (!mClient.hasSession()) {
// ignore if no session
return;
}
/ *********其余代码无法访问*********** /
@Override
public void pause() {
if (!mClient.hasSession()) {
// ignore if no session
return;
}
if (DEBUG) {
Log.d(TAG, "pause");
}
mClient.pause(null, new SessionActionCallback() {
@Override
public void onResult(Bundle data, String sessionId, MediaSessionStatus sessionStatus) {
logStatus("pause: succeeded", sessionId, sessionStatus, null, null);
if (mCallback != null) {
mCallback.onPlaylistChanged();
}
}
@Override
public void onError(String error, int code, Bundle data) {
logError("pause: failed", error, code);
}
});
}