title: SeekBar and media player in android
body: <p>I have a simple player and recorder. Everything works great but have one problem. I want to add seek bar to see progress in playing record and use this seek bar to set the place from the player should play. I have onProgress but with no effect. This is the code:</p>
  <pre><code>package com.example.recorder;
  
  import java.io.IOException;
  
  import android.app.Activity;
  import android.media.MediaPlayer;
  import android.media.MediaRecorder;
  import android.os.Bundle;
  import android.os.Environment;
  import android.util.Log;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.widget.Button;
  import android.widget.SeekBar;
  import android.widget.SeekBar.OnSeekBarChangeListener;
  
  public class MainActivity extends Activity implements OnSeekBarChangeListener
  {
      private static final String LOG_TAG = &quot;AudioRecordTest&quot;;
      private static String mFileName = null;
      private SeekBar seekBar;
      private MediaRecorder mRecorder = null;
      private Button startRecord, startPlaying, stopPlaying;
      private MediaPlayer   mPlayer = null;
  
      private void onRecord(boolean start) {
          if (start) {
              startRecording();
          } else {
              stopRecording();
          }
      }
  
  
      
      private void startPlaying() {
          if(mPlayer != null &amp;&amp; mPlayer.isPlaying()){
              mPlayer.pause();
          } else if(mPlayer != null){
              mPlayer.start();
          }else{
          mPlayer = new MediaPlayer();
          try {
              
              mPlayer.setDataSource(mFileName);
              mPlayer.prepare();
              mPlayer.start();
              
          } catch (IOException e) {
              Log.e(LOG_TAG, &quot;prepare() failed&quot;);
          }
          }
      
      }
  
      private void stopPlaying() {
          mPlayer.release();
          mPlayer = null;
          startPlaying.setText(&quot;Start playing&quot;);
      }
  
      private void pausePlaying(){
          if(mPlayer.isPlaying()){
              mPlayer.pause();
          } else {
            mPlayer.start();
          }
      }
      
      private void startRecording() {
          mRecorder = new MediaRecorder();
          mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
          mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
          mRecorder.setOutputFile(mFileName);
          mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  
          try {
              mRecorder.prepare();
          } catch (IOException e) {
              Log.e(LOG_TAG, &quot;prepare() failed&quot;);
          }
  
          mRecorder.start();
      }
  
      private void stopRecording() {
          mRecorder.stop();
          mRecorder.release();
          mRecorder = null;
      }
  
  
  
      public MainActivity() {
          mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
          mFileName += &quot;/audiorecordtest.3gp&quot;;
      }
  
      @Override
      public void onCreate(Bundle icicle) {
          super.onCreate(icicle);
  
          setContentView(R.layout.activity_main);
          
          startPlaying = (Button) findViewById(R.id.buttonStartPlay);
          stopPlaying = (Button) findViewById(R.id.buttonStopPlaying);
          startRecord = (Button) findViewById(R.id.buttonStartRecord);
          seekBar = (SeekBar) findViewById(R.id.seekBar);
          
          startRecord.setOnClickListener(new OnClickListener() {
              boolean mStartRecording = true;
              @Override
              public void onClick(View v) {
                  onRecord(mStartRecording);
                  if (mStartRecording) {
                      startRecord.setText(&quot;Stop recording&quot;);
                  } else {
                      startRecord.setText(&quot;Start recording&quot;);
                  }
                  mStartRecording = !mStartRecording;
                  
              }
          });  
          
          
          startPlaying.setOnClickListener(new OnClickListener() {
              boolean mStartPlaying = true;
              @Override
              public void onClick(View v) {
                  //onPlay(mStartPlaying);
                  startPlaying();
                  if (mStartPlaying) {
                      startPlaying.setText(&quot;Stop playing&quot;);
                  } else {
                      startPlaying.setText(&quot;Start playing&quot;);
                  }
                  mStartPlaying = !mStartPlaying;
              }
          });
          
          stopPlaying.setOnClickListener(new OnClickListener() {
              boolean mStartPlaying = true;
              @Override
              public void onClick(View v) {
                   stopPlaying();
                  
              }
          });
          
          
      }
  
      @Override
      public void onPause() {
          super.onPause();
          if (mRecorder != null) {
              mRecorder.release();
              mRecorder = null;
          }
  
          if (mPlayer != null) {
              mPlayer.release();
              mPlayer = null;
          }
      }
  
  
  
      @Override
      public void onProgressChanged(SeekBar seekBar, int progress,
              boolean fromUser) {
          if(fromUser){
              mPlayer.seekTo(progress); 
              seekBar.setProgress(progress);
              }
              else{
               // the event was fired from code and you shouldn't call player.seekTo()
              }
          
      }
  
  
  
      @Override
      public void onStartTrackingTouch(SeekBar seekBar) {
          // TODO Auto-generated method stub
          
      }
  
  
  
      @Override
      public void onStopTrackingTouch(SeekBar seekBar) {
          // TODO Auto-generated method stub
          
      }
  }
  </code></pre>
  <p>Any ideas on how to use seek bar to see progress and set place from the record should play?</p>