title: Android: How to get seekbar to work while music is playing?
body: <p>I have looked everywhere to fix my problem but i just cant seem to get
  it going.</p>
  
  <p>How do i make seekbar automatically slide with song play ?</p>
  
  <p>this is what i have so far.</p>
  
  <blockquote>
  <pre><code>ArrayList&lt;String&gt; arrlist = new ArrayList&lt;String&gt;(20);
  private Handler seekHandler = new Handler();
  ImageButton next, playPause, previous;
  SeekBar seekBar;
  
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout);
        getSupportActionBar().hide();
  
        getInit();
    }
  
    public void getInit() {
  
        songCurrentDurationLabel = (TextView) findViewById(R.id.startTime);
        songTotalDurationLabel = (TextView) findViewById(R.id.endTime);
  
        mediaPlayer = new MediaPlayer();
        mediaPlayer = MediaPlayer.create(this, R.raw.firstsong);
  
        seekBar = (SeekBar) findViewById(R.id.seekBar1);
        seekBar.setMax(mediaPlayer.getDuration());
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
  
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // remove message Handler from updating progress bar
                seekHandler.removeCallbacks(mUpdateTimeTask);
                int totalDuration = mediaPlayer.getDuration();
                int currentPosition = progressToTimer(seekBar.getProgress(), totalDuration);
  
                // forward or backward to certain seconds
                mediaPlayer.seekTo(currentPosition);
  
                // update timer progress again
                updateProgressBar();
            }
  
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // remove message Handler from updating progress bar
                seekHandler.removeCallbacks(mUpdateTimeTask);
            }
  
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if (mediaPlayer != null &amp;&amp; fromUser) {
                    mediaPlayer.seekTo(progress);
  //                     mediaPlayer.seekTo(progress * 1000);
                }
            }
        });
  
        spinner = ((Spinner) findViewById(R.id.spinner1));
        spinner.setAdapter(songAdapter);
  
        previous = ((ImageButton) findViewById(R.id.previous));
        playPause = ((ImageButton) findViewById(R.id.play));
        next = ((ImageButton) findViewById(R.id.next));
  
        spinner.setOnItemSelectedListener(this);
        previous.setOnClickListener(this);
        playPause.setOnClickListener(this);
        next.setOnClickListener(this);
  
        totalDuration = mediaPlayer.getDuration();
        currentDuration = mediaPlayer.getCurrentPosition() / 1000;
  
        // Displaying Total Duration time
        songTotalDurationLabel.setText("" + milliSecondsToTimer(totalDuration));
  
        // Displaying time completed playing
        songCurrentDurationLabel.setText("" + milliSecondsToTimer(currentDuration));
    }
  
    public void updateProgressBar() {
        seekHandler.postDelayed(mUpdateTimeTask, 100);
    }
  
    private Runnable mUpdateTimeTask = new Runnable() {
        @Override
        public void run() {
            long totalDuration = mediaPlayer.getDuration();
            long currentDuration = mediaPlayer.getCurrentPosition() / 1000;
            int progress = (int) getProgressPercentage(currentDuration, totalDuration);
  
            // Updating progress bar
            seekBar.setProgress(progress);
  
            // Running this thread after 100 milliseconds
            seekHandler.postDelayed(this, 100);
        }
    };
  
    public int progressToTimer(int progress, int totalDuration) {
        int currentDuration = 0;
        totalDuration = (int) (totalDuration / 1000);
        currentDuration = (int) ((((double) progress) / 100) * totalDuration);
  
        // return current duration in milliseconds
        return currentDuration * 1000;
    }
  
    public int getProgressPercentage(long currentDuration1, long totalDuration1) {
        Double percentage = (double) 0;
  
        long currentSeconds = (int) (currentDuration1 / 1000);
        long totalSeconds = (int) (totalDuration1 / 1000);
  
        // calculating percentage
        percentage = (((double) currentSeconds) / totalSeconds) * 100;
  
        // return percentage
        return percentage.intValue();
    }
  
    public String milliSecondsToTimer(long milliseconds) {
        String finalTimerString = "";
        String secondsString = "";
  
        // Convert total duration into time
        int hours = (int) (milliseconds / (1000 * 60 * 60));
        int minutes = (int) (milliseconds % (1000 * 60 * 60)) / (1000 * 60);
        int seconds = (int) ((milliseconds % (1000 * 60 * 60)) % (1000 * 60) / 1000);
        // Add hours if there
        if (hours &gt; 0) {
            finalTimerString = hours + ":";
        }
  
        // Prepending 0 to seconds if it is one digit
        if (seconds &lt; 10) {
            secondsString = "0" + seconds;
        } else {
            secondsString = "" + seconds;
        }
  
        finalTimerString = finalTimerString + minutes + ":" + secondsString;
  
        // return timer string
        return finalTimerString;
    }
  </code></pre>
  </blockquote>
  
  <p>I didnt include the song list and all the other stuff as i dont see
  why it would be necesary to put here. But anyways, when i do what i
  have here i dont get no error or anything, the seekbar just doesnt
  automatically move and when i try to move it manually to a position it
  goes right back to 0.</p>