Reputation: 606
I am creating a very simple media player app. I would like to resume the song from the SeekTo position that I have captured using getCurrentPosition. However seekTo does not start from the position I have captured but from the beginning.
Code to capture current position, pause and change button text to Click to resume
int media_length = mediaplayer.getCurrentPosition();
Toast.makeText(this,"media length is"+media_length, Toast.LENGTH_LONG).show();
mbutton.setText("Click to Resume");
mediaplayer.pause();
Code to seekTo captured position, start and change button text to Click to Pause
mediaplayer.seekTo(media_length);
mediaplayer.start();
mbutton.setText("Click to Pause");
A couple of posts are there already related to it but they seem to claim a bug in Android. Ref: MediaPlayer seekTo doesn't work and is there any workaround for this? appreciate any help.
Upvotes: 9
Views: 20963
Reputation: 41
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
mp.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
@Override
public void onSeekComplete(MediaPlayer mp) {
mp.start();
}
});
}
});
Upvotes: 0
Reputation: 3648
Try to use the callback MediaPlayer.OnSeekCompleteListener.
Important : In this sample, i've added SystemClock.sleep(200)
because onSeekComplete(MediaPlayer arg0)
is called too soon by the player BEFORE seekTo is really completed.
mMediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
@Override
public void onSeekComplete(MediaPlayer arg0) {
Log.d(TAG, "onSeekComplete() current pos : " + arg0.getCurrentPosition());
SystemClock.sleep(200);
mMediaPlayer.start();
}
});
try {
mMediaPlayer.seekTo(mCurrentPos);
} catch (IllegalStateException e){
Log.d(TAG, e.getLocalizedMessage(), e);
}
Upvotes: 1
Reputation: 3134
You can try below code. It is working for me...
public void forwardSong() {
if (mPlayer != null) {
int currentPosition = mPlayer.getCurrentPosition();
if (currentPosition + seekForwardTime <= mPlayer.getDuration()) {
mPlayer.seekTo(currentPosition + seekForwardTime);
} else {
mPlayer.seekTo(mPlayer.getDuration());
}
}
}
You can pause mediaplayer before this and just call start method after this method.
Upvotes: 14