title: Fixing a seekbar on my Android music player
body: <p>I've created a simple music player in Android which has a seekbar which displays the current position in the song playing.  The forward, rewind, play and pause functions work correctly.  What I am trying to do is have the seekbar actually move the position within the song.  (at present the seekbar does not change the position within the song.  Heres my code</p>
  
  <pre><code>public class MusicPlayerA extends Activity {
  
  private MediaPlayer mediaPlayer;
  public TextView songName, duration;
  private double timeElapsed = 0, finalTime = 0;
  private int forwardTime = 2500, backwardTime = 2500;
  private Handler durationHandler = new Handler();
  private SeekBar seekbar;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
  
      //set the layout of the Activity
      setContentView(R.layout.musicplayerview);
      //initialize views
      initializeViews();
  }
  
  @Override
  protected void onPause() {
      super.onPause();
      if (mediaPlayer != null) {
          mediaPlayer.pause();
          if (isFinishing()) {
              mediaPlayer.stop();
              mediaPlayer.release();
          }
      }
  }
  
  public void initializeViews(){
      songName = (TextView) findViewById(R.id.songName);
      mediaPlayer = MediaPlayer.create(this, R.raw.druidsad);
      finalTime = mediaPlayer.getDuration();
      duration = (TextView) findViewById(R.id.songDuration);
      seekbar = (SeekBar) findViewById(R.id.seekBar);
      songName.setText("Druids Ad");  
      seekbar.setMax((int) finalTime);
      seekbar.setClickable(true);
  }
  
  // play mp3 song
  public void play(View view) {
      mediaPlayer.start();
      timeElapsed = mediaPlayer.getCurrentPosition();
      seekbar.setProgress((int) timeElapsed);
      durationHandler.postDelayed(updateSeekBarTime, 100);
  }
  
  //handler to change seekBarTime
  private Runnable updateSeekBarTime = new Runnable() {
      public void run() {
          //get current position
          timeElapsed = mediaPlayer.getCurrentPosition();
          //set seekbar progress
          seekbar.setProgress((int) timeElapsed);
          //set time remaining
          double timeRemaining = finalTime - timeElapsed;
          duration.setText(String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes((long) timeRemaining), TimeUnit.MILLISECONDS.toSeconds((long) timeRemaining) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) timeRemaining))));
  
          //repeat yourself that again in 100 miliseconds
          durationHandler.postDelayed(this, 100);
      }
  };
  
  // pause mp3 song
  public void pause(View view) {
      mediaPlayer.pause();
  }
  
  // go forward at forwardTime seconds
  public void forward(View view) {
      //check if we can go forward at forwardTime seconds before song endes
      if ((timeElapsed + forwardTime) &lt;= finalTime) {
          timeElapsed = timeElapsed + forwardTime;
  
          //seek to the exact second of the track
          mediaPlayer.seekTo((int) timeElapsed);
      }
  }
  
  // go backwards at backwardTime seconds
  public void rewind(View view) {
      //check if we can go back at backwardTime seconds after song starts
      if ((timeElapsed - backwardTime) &gt; 0) {
          timeElapsed = timeElapsed - backwardTime;
  
          //seek to the exact second of the track
          mediaPlayer.seekTo((int) timeElapsed);
      }
  }
  
   // handler for back button used on music player screen
   public void BackButton2 (View view) {
  
      MediaPlayer mMediaPlayer = MediaPlayer.create(this, R.raw.soundbackbutton) ;
      mMediaPlayer.start();
  
      Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
      vib.vibrate(200);
  
      Intent mus = new Intent (this, Music.class);
      startActivity(mus);
   }
  
  // handler for home button used on all screens
  public void BackButton (View view) {
  
      MediaPlayer mMediaPlayer = MediaPlayer.create(this, R.raw.soundbackbutton) ;
      mMediaPlayer.start();
  
      Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
      vib.vibrate(200);
  
      Intent mn = new Intent (this, Music.class);
      startActivity(mn);
   }
  </code></pre>
  
  <p>}</p>