First, paste the program running result of this article. The above is the playing/stopping audio, and the progress can be adjusted using SeekBar. below is the playing/stopping video, and the progress is also adjusted using SeekBar:
Source code of main. xml:
The source code of this program is a bit long:
Package com. testMedia; import java. io. IOException; import java. util. timer; import java. util. timerTask; import android. app. activity; import android. media. audioManager; import android. media. mediaPlayer; import android. OS. bundle; import android. view. surfaceHolder; import android. view. surfaceView; import android. view. view; import android. widget. button; import android. widget. seekBar; import android. widget. toast; public class testMedia extends Activity {/** Called when the activity is first created. */private SeekBar skb_audio = null; private Button btn_start_audio = null; private Button btn_stop_audio = null; private SeekBar skb_video = null; private Button btn_start_video = null; private Button btn_stop_video = null; private SurfaceView surfaceView; private SurfaceHolder surfaceHolder; private MediaPlayer m = null; private Timer mTimer; private TimerTask mTimerTask; private boolean isChanging = false; // mutex variable, prevent degree conflict when the timer and SeekBar are dragged @ Override public void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R. layout. main); // ---------- Media control settings --------- // m = new MediaPlayer (); // a prompt is displayed after the playback ends. setOnCompletionListener (new MediaPlayer. onCompletionListener () {@ Override public void onCompletion (MediaPlayer arg0) {Toast. makeText (testMedia. this, "end", 1000 ). show (); m. release () ;}}); // ---------- the Timer records the playback progress --------- // mTimer = new Timer (); mTimerTask = new TimerTask () {@ Override public void run () {if (isChanging = true) return; if (m. getVideoHeight () = 0) skb_audio.setProgress (m. getCurrentPosition (); else skb_video.setProgress (m. getCurrentPosition () ;}}; mTimer. schedule (mTimerTask, 0, 10); btn_start_audio = (Button) this. findViewById (R. id. button01); btn_stop_audio = (Button) this. findViewById (R. id. button02); btn_start_audio.setOnClickListener (new ClickEvent (); btn_stop_audio.setOnClickListener (new ClickEvent (); skb_audio = (SeekBar) this. findViewById (R. id. seekBar01); skb_audio.setOnSeekBarChangeListener (new SeekBarChangeEvent (); btn_start_video = (Button) this. findViewById (R. id. button03); btn_stop_video = (Button) this. findViewById (R. id. button04); btn_start_video.setOnClickListener (new ClickEvent (); btn_stop_video.setOnClickListener (new ClickEvent (); skb_video = (SeekBar) this. findViewById (R. id. seekBar02); skb_video.setOnSeekBarChangeListener (new SeekBarChangeEvent (); surfaceView = (SurfaceView) findViewById (R. id. surfaceView01); surfaceHolder = surfaceView. getHolder (); surfaceHolder. setFixedSize (100,100); surfaceHolder. setType (SurfaceHolder. SURFACE_TYPE_PUSH_BUFFERS);}/** key event processing */class ClickEvent implements View. onClickListener {@ Override public void onClick (View v) {if (v = btn_start_audio) {m. reset (); // restore to uninitialized status m = MediaPlayer. create (testMedia. this, R. raw. big); // read the audio skb_audio.setMax (m. getDuration (); // set the SeekBar length try {m. prepare (); // prepare} catch (IllegalStateException e) {// TODO Auto-generated catch block e. printStackTrace ();} catch (IOException e) {// TODO Auto-generated catch block e. printStackTrace ();} m. start (); // play} else if (v = btn_stop_audio | v = btn_stop_video) {m. stop ();} else if (v = btn_start_video) {m. reset (); // restore to uninitialized status m = MediaPlayer. create (testMedia. this, R. raw. test); // read the video skb_video.setMax (m. getDuration (); // set the length of SeekBar m. setAudioStreamType (AudioManager. STREAM_MUSIC); m. setDisplay (surfaceHolder); // set screen try {m. prepare ();} catch (IllegalArgumentException e) {// TODO Auto-generated catch block e. printStackTrace ();} catch (IllegalStateException e) {// TODO Auto-generated catch block e. printStackTrace ();} catch (IOException e) {// TODO Auto-generated catch block e. printStackTrace ();} m. start () ;}}/ ** SeekBar progress change event */class SeekBarChangeEvent implements SeekBar. onSeekBarChangeListener {@ Override public void onProgressChanged (SeekBar seekBar, int progress, boolean fromUser) {// TODO Auto-generated method stub} @ Override public void onStartTrackingTouch (SeekBar seekBar) {isChanging = true;} @ Override public void onStopTrackingTouch (SeekBar seekBar) {m. seekTo (seekBar. getProgress (); isChanging = false ;}}}