1

I am developing an app that plays music from raw music files and it updates seekbar once every second while the media player is playing. However, this is interrupting audio each time the seekbar is updated through Runnable. I've tried using Sound Pool (from here) or creating new Thread suggested by other posts but the issue still exists. Should I be using service instead?

The following code snippet is run from a ListFragment. Thanks.

mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        updateProgress = false;
    }
});

seekBar.setMax(mediaPlayer.getDuration());
seekBar.setProgress(0);
updateProgress = true;

updateRunnableHandler = new Handler();
mUpdateRunnable = new Runnable() {
    @Override
    public void run() {
        if (updateProgress) {
            seekBar.setProgress(mediaPlayer.getCurrentPosition());
            updateRunnableHandler.postDelayed(mUpdateRunnable, 1000);
        }
    }
};

updateRunnableHandler.postDelayed(mUpdateRunnable, 1000);
mediaPlayer.start();
Community
  • 1
  • 1
c 2
  • 1,127
  • 3
  • 13
  • 21

1 Answers1

4

Found the issue. The code needs to check if the onProgressChanged event handled by seekbar's setOnSeekBarChangeListener is from the user or not.

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        if (fromUser) {
            musicService.setPosition(progress);
        }
    }
c 2
  • 1,127
  • 3
  • 13
  • 21