android - MediaPlayer seekTo 从头开始​​不一致地播放歌曲

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

最佳答案

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

关于android - MediaPlayer seekTo 从头开始​​不一致地播放歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4129837/

相关文章:

android - 检查 android 中的互联网连接(不是网络连接)

android - 如何一键高效查看最近媒体

android - (重新)在android模拟器上安装SD卡

android - 设置Android模拟器的IP地址

java - Appengine API 方法返回模型集合

android - 如何启用 github 操作访问 gradle 属性?

android - 如何使用 Flutter Slider 设置自定义数据模型

android - 为什么在 Android 模拟器上运行时 Firebase 在 PhoneGap 应用程序中返回 404 错误?

android - 如何让英特尔 HAXM 在 Windows 10 上运行

Android 应用程序在模拟器中不断崩溃