title: Adding Seek bar to android video player
body: <pre><code>import java.io.File;
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.io.InputStream;
  import java.net.URL;
  import java.net.URLConnection;
  
  import android.app.Activity;
  import android.os.Bundle;
  import android.os.Handler;
  import android.util.Log;
  import android.view.MotionEvent;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.view.View.OnTouchListener;
  import android.webkit.URLUtil;
  import android.widget.EditText;
  import android.widget.ImageButton;
  import android.widget.SeekBar;
  import android.widget.Toast;
  import android.widget.VideoView;
  
  public class VideoViewDemo extends Activity implements OnClickListener, OnTouchListener {
      private static final String TAG = "VideoViewDemo";
  
      private VideoView mVideoView;
      private EditText mPath;
      private ImageButton mPlay;
      private ImageButton mPause;
      private ImageButton mReset;
      private ImageButton mStop;
      private String current;
  
      private int lengthOfAudio;
      private SeekBar seekBar;
      private final Handler handler = new Handler();
      private final Runnable r = new Runnable() {@
          Override
          public void run() {
              updateSeekProgress();
          }
      };
  
  
      @Override
      public void onCreate(Bundle icicle) {
          super.onCreate(icicle);
          setContentView(R.layout.main);
          mVideoView = (VideoView) findViewById(R.id.surface_view);
  
          mPath = (EditText) findViewById(R.id.path);
          mPath.setText("http://daily3gp.com/vids/747.3gp");
  
          mPlay = (ImageButton) findViewById(R.id.play);
          mPause = (ImageButton) findViewById(R.id.pause);
          mReset = (ImageButton) findViewById(R.id.reset);
          mStop = (ImageButton) findViewById(R.id.stop);
  
          seekBar = (SeekBar) findViewById(R.id.seekBar);
          seekBar.setOnTouchListener(this);
  
          mPlay.setOnClickListener(new OnClickListener() {
              public void onClick(View view) {
                  playVideo();
              }
          });
          mPause.setOnClickListener(new OnClickListener() {
              public void onClick(View view) {
                  if (mVideoView != null) {
                      mVideoView.pause();
                  }
              }
          });
          mReset.setOnClickListener(new OnClickListener() {
              public void onClick(View view) {
                  if (mVideoView != null) {
                      mVideoView.seekTo(0);
                  }
              }
          });
          mStop.setOnClickListener(new OnClickListener() {
              public void onClick(View view) {
                  if (mVideoView != null) {
                      current = null;
                      mVideoView.stopPlayback();
                  }
              }
          });
  
          runOnUiThread(new Runnable() {
              public void run() {
                  playVideo();
                  updateSeekProgress();
              }
          });
      }
      public void onClick(View view) {
          updateSeekProgress();
      }
  
  
      public boolean onTouch(View v, MotionEvent event) {
          if (mVideoView.isPlaying()) {
              SeekBar tmpSeekBar = (SeekBar) v;
              mVideoView.seekTo((lengthOfAudio / 100) * tmpSeekBar.getProgress());
          }
          return false;
      }
  
      private void playVideo() {
          try {
              final String path = mPath.getText().toString();
              Log.v(TAG, "path: " + path);
              if (path == null || path.length() == 0) {
                  Toast.makeText(VideoViewDemo.this, "File URL/path is empty",
                      Toast.LENGTH_LONG).show();
  
              } else {
                  // If the path has not changed, just start the media player
                  if (path.equals(current) &amp;&amp; mVideoView != null) {
                      mVideoView.start();
                      //mVideoView.requestFocus();
                      return;
                  }
                  current = path;
                  mVideoView.setVideoPath(getDataSource(path));
  
                  lengthOfAudio = 180000;
                  mVideoView.start();
                  //mVideoView.requestFocus();
  
              }
          } catch (Exception e) {
              Log.e(TAG, "error: " + e.getMessage(), e);
              if (mVideoView != null) {
                  mVideoView.stopPlayback();
              }
          }
      }
  
  
      private void updateSeekProgress() {
          if (mVideoView.isPlaying()) {
              seekBar.setProgress((int)(((float) mVideoView.getCurrentPosition() / lengthOfAudio) * 100));
              handler.postDelayed(r, 1000);
          }
      }
  
      private String getDataSource(String path) throws IOException {
          if (!URLUtil.isNetworkUrl(path)) {
              return path;
          } else {
              URL url = new URL(path);
              URLConnection cn = url.openConnection();
              cn.connect();
              InputStream stream = cn.getInputStream();
              if (stream == null)
                  throw new RuntimeException("stream is null");
              File temp = File.createTempFile("mediaplayertmp", "dat");
              temp.deleteOnExit();
              String tempPath = temp.getAbsolutePath();
              FileOutputStream out = new FileOutputStream(temp);
              byte buf[] = new byte[128];
              do {
                  int numread = stream.read(buf);
                  if (numread &lt;= 0)
                      break;
                  out.write(buf, 0, numread);
              } while (true);
              try {
                  stream.close();
              } catch (IOException ex) {
                  Log.e(TAG, "error: " + ex.getMessage(), ex);
              }
              return tempPath;
          }
      }
  }
  </code></pre>
  
  <p>I took a sample tutorial from <a href="http://davanum.wordpress.com/2009/12/04/android-%E2%80%93-videomusic-player-sample-take-2/" rel="nofollow">http://davanum.wordpress.com/2009/12/04/android-%E2%80%93-videomusic-player-sample-take-2/</a>
  and further enhancing it to implement seek bar. I have added the code but seek bar doesn't move as the video progresses. Am I doing anything wrong? I am new to android programming.</p>