我正在创建一个非常简单的媒体播放器应用。我想从使用getCurrentPosition捕获的SeekTo位置恢复这首歌。但是,seekTo并不是从我捕获的位置开始,而是从头开始。
捕获当前位置的代码,暂停和更改按钮文本以单击以继续
int media_length = mediaplayer.getCurrentPosition();
Toast.makeText(this,"media length is"+media_length, Toast.LENGTH_LONG).show();
mbutton.setText("Click to Resume");
mediaplayer.pause();
要搜索的代码捕获位置,启动和更改按钮文本以单击以暂停
mediaplayer.seekTo(media_length);
mediaplayer.start();
mbutton.setText("Click to Pause");
有几个帖子已经与它有关但它们似乎声称Android中存在错误。 参考:MediaPlayer seekTo doesn't work和 这有什么解决方法吗?感谢任何帮助。
答案 0 :(得分:8)
您可以尝试以下代码。它对我有用......
public void forwardSong() {
if (mPlayer != null) {
int currentPosition = mPlayer.getCurrentPosition();
if (currentPosition + seekForwardTime <= mPlayer.getDuration()) {
mPlayer.seekTo(currentPosition + seekForwardTime);
} else {
mPlayer.seekTo(mPlayer.getDuration());
}
}
}
您可以在此之前暂停媒体播放器,只需在此方法之后调用start方法。
答案 1 :(得分:1)
尝试使用回调MediaPlayer.OnSeekCompleteListener。
重要提示:在此示例中,我添加了SystemClock.sleep(200)
,因为玩家在搜索到真正完成之前很快就会调用onSeekComplete(MediaPlayer arg0)
。
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);
}
答案 2 :(得分:0)
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();
}
});
}
});