我是Android开发新手,我正在编写游戏。我的游戏在每个级别开始之前都有过程,并且通过视频查看完成过程。我的问题是,在应用程序暂停时,cutceen在恢复时从头开始。
@Override
public void onPause() {
super.onPause();
video.pause();
}
@Override
public void onResume()
{
super.onResume();
video.resume();
}
我们的问题是视频实际上并没有从我们暂停的地方恢复,而是从一开始就恢复。
答案 0 :(得分:53)
您可以使用此
@Override
public void onPause() {
Log.d(TAG, "onPause called");
super.onPause();
stopPosition = videoView.getCurrentPosition(); //stopPosition is an int
videoView.pause();
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume called");
videoView.seekTo(stopPosition);
videoView.start(); //Or use resume() if it doesn't work. I'm not sure
}
答案 1 :(得分:21)
不应使用video.pause(),video.resume(),因为当你调用它时,缓冲数据将会丢失。这也是为什么每当你调用video.resume()时VideoView在BEGINNING播放的原因。 看见: VideoView onResume loses buffered portion of the video
解决方案:
VideoView videoView;
MediaPlayer mp;
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
this.mp = mp;
}
});
public void pause(){
//NOT videoview.pause(); Needn't save Stop position
if (mp != null){
mp.pause();
}
}
public void resume(){
//NOT videoview.resume();
if (mp != null){
mp.start(); //Video will begin where it stopped
}
}
答案 2 :(得分:17)
而不是resume()
,再次使用start()
它将从您暂停视频的位置开始播放。
答案 3 :(得分:12)
在OnPause中,您可以获得当前位置。
length=mVideoView.getCurrentPosition();
和长度值在OnResume()中使用。
mVideoView.seekTo(length);
mVideoView.start()
工作正常。
答案 4 :(得分:1)
int stopPosition; // Globally declare class level...
@Override
public void onPause() {
super.onPause();
onPauseVideoView();
}
@Override
public void onResume() {
super.onResume();
Log.e("WatchVideoAd Fragment", "onPause called");
onResumeVideoView();
}
private void onPauseVideoView() {
stopPosition = videoview.getCurrentPosition(); //stopPosition is an int
videoview.pause();
}
private void onResumeVideoView() {
videoview.seekTo(stopPosition);
videoview.start(); //Or use resume() if it doesn't work. I'm not sure
}
onHiddenChanged(如果出现碎片)
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if (!hidden) {
if (getActivity() != null) {
((AppActivity) getActivity()).updateTitle(getResources().getString(R.string.title_game));
}
Log.e("keshav", "WatchVideoAd Fragment ");
onResumeVideoView();
} else {
Log.e("keshav", "WatchVideoAd Fragment else ");
onPauseVideoView();
}
}
答案 5 :(得分:0)
请尝试以下代码,它将完全正常
@Override
public void onPause() {
super.onPause();
stopPosition = videoView.getCurrentPosition(); //stopPosition is an int
if (videoView.isPlaying())
videoView.pause();
}
@Override
public void onResume() {
super.onResume();
if (videoView != null) {
videoView.seekTo(stopPosition);
}
}
请确保您的Manifest.xml中提到了以下行
<activity
android:name="<Video Play Activity Name Here>"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="landscape"
></activity>
答案 6 :(得分:0)
只需使用onSaveInstanseState方法而不是onPause,并使用onRestart而不是onResume。它肯定会奏效。干杯!