MediaPlayer寻求从一开始就不一致地播放歌曲

时间:2010-11-09 01:55:58

标签: android android-emulator

我正在使用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类的一些输出,表明歌曲的位置确实已设置为某个偏移量。我已经调试了几个小时并搜索了论坛,仍然没有解决方案。请帮忙。

1 个答案:

答案 0 :(得分:1)

如果您现在还没有找到它,这是一个缓冲问题(issue documented here)。寻找非缓冲位置导致从头开始播放。建议的解决方案是found here(不是最优雅的,但关于所有要做的事情)。