I am new to android development and I am programming a game. My game has cutsceens that play before each level starts, cutsceens which are done through videoview. My problem
In OnPause you can get the current position .
length=mVideoView.getCurrentPosition();
and length value use in OnResume ().
mVideoView.seekTo(length);
mVideoView.start()
working fine .
Just use onSaveInstanseState method instead of onPause and use onRestart instead of onResume. It will definitely work. Cheers !
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 in case of Fragment
@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();
}
}
You can use this
@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
}
original post
Instead of resume()
, use start()
again.
It will start the playback from the point where you paused the video.
Shouldn't use video.pause(), video.resume(), because when you call it, the buffering data will be lost. That is also the reason WHY VideoView play at BEGINNING whenever you call video.resume(). See it: VideoView onResume loses buffered portion of the video
Solution:
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
}
}