我正在使用Android的MediaPlayer类开始播放一些偏移的歌曲。在代码中指定此偏移后,我播放期望从该偏移位置听到它的歌曲,但我听到它从头开始播放。请注意以下代码:
MediaPlayer mplayer = new MediaPlayer();
mplayer.reset();
try {
// For example's sake, specify some known song path
mplayer.setDataSource("//media/external/audio/media/1");
// call blocking prepare()
mplayer.prepare();
} catch (Exception e) {
// Keep try/catch simple for example's sake
e.printStackTrace();
return;
}
// seekTo is an asynchronous operation. Set it's complete callback to play the song once seekTo has completed
mplayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
@Override
public void onSeekComplete(MediaPlayer mp) {
// Start the song 30 seconds in
mp.start();
}
});
// Seek to 30 seconds into the song
mplayer.seekTo(30000);
此代码示例在模拟器中运行时没有错误(针对Android 1.6,2.1和2.2进行了测试);但是,当在某些手机上运行时,歌曲将从头开始播放。我知道这确实发生在我的Droid Incredible(android 2.2)上。另请注意,LogCat将始终具有MediaPlayer类的一些输出,表明歌曲的位置确实已设置为某个偏移量。我已经调试了几个小时并搜索了论坛,仍然没有解决方案。请帮忙。
答案 0 :(得分:1)
如果您现在还没有找到它,这是一个缓冲问题(issue documented here)。寻找非缓冲位置导致从头开始播放。建议的解决方案是found here(不是最优雅的,但关于所有要做的事情)。