title: Using seekbar with music in android
body: <p>I am actually creating an app with a button, a seekbar and an an image. The button is used to Play/Pause the music. the music played smooth before adding the seekbar. But, after writing the code for seekbar to progress with the position of music, the music seems to be a bit choppy. 
  Also, i want to reset the position of seekbar to start and change the text on button to "Play" after the music is finished playing.
  Can any one tell me why the music is choppy after implementing seekbar?
  Also, suggest me how to deal after the music is finished playing.
  The coded i used is below:</p>
  
  <pre><code>public class MainActivity extends ActionBarActivity {
  
  private MediaPlayer song;
  private SeekBar seekbar;
  
  private final Handler handler = new Handler();
  
  private final Runnable updatePositionRunnable = new Runnable() {
          public void run() {
                  updatePosition();
          }
  };
  
  //private boolean isPlaying = false;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
  
  
      if (savedInstanceState == null) {
          getSupportFragmentManager().beginTransaction()
                  .add(R.id.container, new PlaceholderFragment())
                  .commit();
      }
  
      seekbar = (SeekBar)findViewById(R.id.musicSeekBar);
      song = MediaPlayer.create( MainActivity.this, R.raw.xyz);   
      seekbar.setMax(song.getDuration());
  
      final Button playButton = (Button)findViewById(R.id.playButton);
  
  
      playButton.setOnClickListener(new OnClickListener() {
  
          @Override
          public void onClick(View v) {
  
  
              if(song.isPlaying()){
                  playButton.setText("Play");
                  song.pause();
                  //isPlaying = false;
                  handler.removeCallbacks(updatePositionRunnable);
              }
              else{
                  playButton.setText("Pause");
                  song.start();
                  //isPlaying = true;
                  updatePosition();
              }
          }
      });
  
      song.setOnCompletionListener(new OnCompletionListener() {
  
          @Override
          public void onCompletion(MediaPlayer mp) {
              playButton.setText("Play");
              //seekbar.setProgress(0);
              //mp.stop();
          }
      });
  
      seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
  
          @Override
          public void onStopTrackingTouch(SeekBar seekBar) {
  
  
          }
  
          @Override
          public void onStartTrackingTouch(SeekBar seekBar) {
  
  
          }
  
          @Override
          public void onProgressChanged(SeekBar seekBar, int progress,
                  boolean fromUser) {
              song.seekTo(progress);
          }
      });
  private void updatePosition(){
      handler.removeCallbacks(updatePositionRunnable);
  
      seekbar.setProgress(song.getCurrentPosition());
  
      handler.postDelayed(updatePositionRunnable, 2000);
  }
  
  
  @Override
  public void onBackPressed() {
  
      super.onBackPressed();
      song.stop();
      song.release();
  }
  </code></pre>