I found a lot of related information on the Internet and felt I didn't want it. I decided to write it myself.
Source code has been put in the resource library, welcome to download: http://download.csdn.net/detail/luozhi3527/5353003
The program uses surface + mediaplayer to customize the console. Can Play local and online videos.
The main implementation code is as follows:
Package COM. xluo. mediaplayertest; import Java. util. timer; import Java. util. timertask; import android. app. activity; import android. app. progressdialog; import android. media. audiomanager; import android. media. mediaplayer; import android. media. mediaplayer. oncompletionlistener; import android. media. mediaplayer. onerrorlistener; import android. media. mediaplayer. oninfolistener; import android. media. mediaplayer. onpre Paredlistener; import android. media. mediaplayer. onseekcompletelistener; import android. media. mediaplayer. onvideosizechangedlistener; import android.net. uri; import android. OS. bundle; import android. OS. handler; import android. OS. message; import android. util. log; import android. view. display; import android. view. keyevent; import android. view. surfaceholder; import android. view. surfaceview; import android. view. vie W; import android. view. windowmanager; import android. widget. imagebutton; import android. widget. linearlayout; import android. widget. seekbar; import android. widget. textview; import android. widget. toast; import android. widget. seekbar. onseekbarchangelistener; public class testvideoplayer extends activity implements oncompletionlistener, onerrorlistener, oninfolistener, onpreparedlistener, onseekcompletelistener, O Includeosizechangedlistener, surfaceholder. callback {public static final string tag = "testvideoplayer"; private Boolean isexit = false; private int currentmusicposition; // current volume string url = NULL; private URI; private string name; private imagebutton playbtn = NULL; // play and pause private textview playtime = NULL; // playback time private textview durationtime = NULL; // total time private textview videoname = NULL; private seekbar Seekbar = NULL; // progress Private seekbar soundbar = NULL; // volume adjustment private handler = new handler () {public void handlemessage (Message MSG) {super. handlemessage (MSG); Switch (MSG. what) {Case 1: If (mediaplayer! = NULL) currentposition = mediaplayer. getcurrentposition (); seekbar. setprogress (currentposition); playtime. settext (totime (currentposition); handler. sendemptymessage (1); break; default: Break ;}}; // used for the progress bar private int currentposition; // The current playback position private progressdialog dialog; // load the wait box private audiomanager maudiomanager = NULL; private view video_contrlbar, titlebar; private Boolean iscontrolbarshow = true; display cur Preview display; surfaceview; surfaceholder; mediaplayer; // mediaplayer is used to play video int scurrentposition; // volume timer showcontroller = new timer (); timertask; private handler fhandler = new handler () {public void handlemessage (Message MSG) {super. handlemessage (MSG); Switch (MSG. what) {Case 1: video_contrlbar.setvisibility (view. gone); titlebar. setvisibility (view. GON E); iscontrolbarshow = false; break; default: Break ;}}; // used for console explicit hidden Boolean readytoplayer = false; @ override public void oncreate (bundle savedinstancestate) {super. oncreate (savedinstancestate); getwindow (). setflags (windowmanager. layoutparams. flag_keep_screen_on, windowmanager. layoutparams. flag_keep_screen_on); // you can specify getwindow (). setflags (windowmanager. layoutparams. flag_fullscreen, windowmanager. layou Tparams. flag_fullscreen); // set setcontentview (R. layout. activity_main); name = "Sunday"; url = "/sdcard/sunny_night.mp4"; // logs available for both network and local videos. D (TAG, "url:" + URL); dialog = new progressdialog (this); // set to wait for the dialog. setmessage ("loading... "); dialog. show (); // console video_contrlbar = (View) findviewbyid (R. id. video_contrlbar); titlebar = (View) findviewbyid (R. id. video_titlebar); showcontrolbar ();/* time */playtime = (textview) Findviewbyid (R. id. video_playtime); // The played time durationtime = (textview) findviewbyid (R. id. video_duration); // total time videoname = (textview) findviewbyid (R. id. play_movie_name); videoname. settext (name);/* set the play, pause, and stop buttons */playbtn = (imagebutton) findviewbyid (R. id. video_playbtn); // start playbtn. setonclicklistener (new view. onclicklistener () {@ overridepublic void onclick (view v) {If (mediaplayer. isplaying () {pause (); PLA Ybtn. setbackgroundresource (R. drawable. video_play_selector);} else {play (); playbtn. setbackgroundresource (R. drawable. video_pause_selector) ;}}); // progress bar seekbar = (seekbar) findviewbyid (R. id. video_seekbar); seekbar. listener (New onseekbarchangelistener () {@ overridepublic void onstoptrackingtouch (seekbar) {}@ overridepublic void onstarttrackingtouch (seekbar) {}@ overridepublic Void onprogresschanged (seekbar, int progress, Boolean fromuser) {If (fromuser) mediaplayer. seekto (Progress) ;}});/* volume control bar */soundbar = (seekbar) findviewbyid (R. id. video_sound); soundbar. listener (New onseekbarchangelistener () {@ overridepublic void onstoptrackingtouch (seekbar) {// todo auto-generated method stub} @ overridepublic void onstarttrackingtouch (seekbar ){/ /Todo auto-generated method stub} @ overridepublic void onprogresschanged (seekbar, int progress, Boolean fromuser) {// todo auto-generated method stubif (fromuser) {int scurrentposition = soundbar. getprogress (); maudiomanager. setstreamvolume (audiomanager. stream_music, scurrentposition, 0) ;}}); surfaceview = (surfaceview) findviewbyid (R. id. surfaceview); surfaceholder = surfaceview. getholder (); Surfaceholder. addcallback (this); surfaceholder. settype (surfaceholder. surface_type_push_buffers); surfaceview. setonclicklistener (new view. onclicklistener () {@ overridepublic void onclick (view v) {// todo auto-generated method stubshowcontrolbar (); // call up the console when you click the screen ;}}); setup (); currentdisplay = getwindowmanager (). getdefadisplay display ();} private void showcontrolbar () {// video_contrlbar.setvisibili of the console Ty (view. Visible); titlebar. setvisibility (view. Visible); iscontrolbarshow = true; If (timertask! = NULL) {timertask. cancel ();} timertask = new timertask () {@ override public void run () {// todo auto-generated method stub if (iscontrolbarshow) {message MSG = fhandler. obtainmessage (1); fhandler. sendmessage (MSG) ;}}; showcontroller. schedule (timertask, 5000); // hide} runnable contrlshow = new runnable () {@ overridepublic void run () {// todo auto-generated method stubvideo_contrlbar.setvisibilit Y (view. gone); titlebar. setvisibility (view. gone); iscontrolbarshow = false; fhandler. postdelayed (contrlshow, 5000) ;};@ override public void surfacechanged (surfaceholder holder, int format, int width, int height) {} private void loadclip () {If (mediaplayer! = NULL) {mediaplayer. reset (); mediaplayer. release (); mediaplayer = NULL;} mediaplayer = new mediaplayer (); // create a mediaplayer. setoncompletionlistener (this); mediaplayer. setonerrorlistener (this); mediaplayer. setonpreparedlistener (this); mediaplayer. setonseekcompletelistener (this); mediaplayer. setonvideosizechangedlistener (this); // listentity entity = dbdao. find (position); // log. D (TAG, "list entit Y object: "+ entity); // string url = entity. geturl (); log. D (TAG, "url:" + URL); uri = Uri. parse (URL); log. D (TAG, "Media URL:" + URL); // URI = Uri. withappendedpath (mediastore. audio. media. external_content_uri, // "" + POS); try {mediaplayer. setdatasource (this, Uri);} catch (exception e) {e. printstacktrace () ;}} private void setup () {loadclip (); try {mediaplayer. prepare (); mediaplayer. setonpreparedlis Tener (New onpreparedlistener () {@ override public void onprepared (final mediaplayer MP) {seekbar. setmax (MP. getduration (); // sets the maximum value of the playback progress bar handler. sendemptymessage (1); // sends a message to handler to start the playtime of the playback progress bar. settext (totime (MP. getcurrentposition (); // initialize the playback time durationtime. settext (totime (MP. getduration (); // sets the time MP. seekto (currentposition); // initialize the mediaplayer playback position/* obtain the maximum volume */maudiomanager = (audiomanager) testvideo Player. this. getsystemservice (testvideoplayer. this. audio_service); int maxsound = maudiomanager. getstreammaxvolume (audiomanager. stream_music);/* Get the current volume */INT currentsound = maudiomanager. getstreamvolume (audiomanager. stream_music); soundbar. setmax (maxsound); soundbar. setprogress (currentsound) ;}});} catch (exception e) {e. printstacktrace () ;}} private void play () {log. D (TAG, "cancel dialog:" + DIALOG);/* set the video size */INT tmpwidth = currentdisplay. getheight (); int tmpheight = currentdisplay. getwidth (); surfaceview. setlayoutparams (New linearlayout. layoutparams (tmpheight, tmpwidth * 3/4); If (dialog! = NULL) {dialog. dismiss ();} mediaplayer. start (); playbtn. setbackgroundresource (R. drawable. video_pause_selector);} private void pause () {mediaplayer. pause () ;}public string totime (INT time) {time/= 1000; int minute = Time/60; int hour = minute/60; int second = time % 60; minute % = 60; return string. format ("% 02d: % 02d: % 02d", hour, minute, second) ;}@ override public void surfacecreated (Surface Holder) {log. D (TAG, "surafce created"); mediaplayer. setdisplay (surfaceholder); // if there is no sentence, only the sound will be played ();} @ override public void surfacedestroyed (surfaceholder holder) {// The playback ends when the surface is destroyed to prevent the image from being played even when the home key is pressed. If (mediaplayer! = NULL) {mediaplayer. reset (); mediaplayer. release (); mediaplayer = NULL;} finish () ;}@ override public void onvideosizechanged (mediaplayer arg0, int arg1, int arg2) {}@ override public void onseekcomplete (mediaplayer MP) {}@ override public void onprepared (mediaplayer MP) {}@ override public Boolean oninfo (mediaplayer arg0, int whatinfo, int extra) {return false ;}@ override public Boolean on Error (mediaplayer arg0, int arg1, int arg2) {return false ;}@ override public void oncompletion (mediaplayer arg0) {// automatically exit finish () after playing ();} public Boolean onkeydown (INT keycode, keyevent event) {Switch (keycode) {Case keyevent. keycode_back: exitby2click (); break; Case keyevent. keycode_volume_down: // volume key control. Call up the console log. D (TAG, "To pressed voice down"); showcontrolbar (); currentmusicposition = soundba R. getprogress (); currentmusicposition --; maudiomanager. setstreamvolume (audiomanager. stream_music, currentmusicposition, 0); soundbar. setprogress (currentmusicposition); break; Case keyevent. keycode_volume_up: log. D (TAG, "To pressed voice up"); showcontrolbar (); currentmusicposition = soundbar. getprogress (); currentmusicposition ++; maudiomanager. setstreamvolume (audiomanager. stream_music, currentmusic Position, 0); soundbar. setprogress (currentmusicposition); break; default: Super. onkeydown (keycode, event);} return true;} private void exitby2click () {timer texit = NULL; If (isexit = false) {isexit = true; // prepare to exit toast. maketext (this, "Play again after one click", toast. length_short ). show (); texit = new timer (); texit. schedule (New timertask () {@ override public void run () {isexit = false; // cancel logout}, 2000 ); // If the return key is not pressed within 2 seconds, start the timer to cancel the task just executed} else {If (mediaplayer! = NULL) {mediaplayer. Release (); mediaplayer. Reset (); mediaplayer = NULL;} finish ();}}}
The main code is annotated and there is no need to explain it again.