首页 > 解决方案 > 在 Android 中播放音频时出现故障

问题描述

我正在使用MediaPlayer在 Android 中播放音频。MediaPlayer工作正常,但是当我使用随音频持续时间更新的SeekBar时,音频播放不流畅并在播放时中断。下面是我的代码片段供参考。

mSongSeekBar.setMax(mMediaPlayer.getDuration());
    mSongSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            mMediaPlayer.seekTo(progress);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });

    new Timer().scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            mSongSeekBar.setProgress(mMediaPlayer.getCurrentPosition());
        }
    }, 0, 500);

这种行为的原因是什么?如何摆脱这个?我应该选择Timer的任何替代品吗?

标签: javaandroidandroid-mediaplayer

解决方案


我遇到了同样的问题,音频不断自行搜索并导致故障。您需要确保仅在用户擦洗音频时才搜索音频,而不是在正常运行时搜索音频。为此,onProgressChanged 的​​布尔 fromUser 参数很有用。这将确保仅在用户擦洗音频时才搜索音频。

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
      if(fromUser){
        mMediaPlayer.seekTo(progress);
       }
    }

推荐阅读