20th improvement in Android mediaplayer playing Network Audio

Source: Internet
Author: User

This article from http://blog.csdn.net/hellogv/, reference must indicate the source!

I have previously introduced the basic usage of mediaplayer. Here I will explain in depth the online playback function of mediaplayer. This article mainly implements mediaplayer's online audio playback function. Because online video playback is more complex than online audio playback, we first introduce the implementation of online audio playback, this will help you gradually gain a deeper understanding of mediaplayer's online playback function. Let's take a look at the running results of this article:

The source code of Main. XML is as follows:

<? XML version = "1.0" encoding = "UTF-8"?> <Br/> <framelayout xmlns: Android = "http://schemas.android.com/apk/res/android" <br/> Android: layout_height = "fill_parent" Android: layout_width = "fill_parent"> <br/> <linearlayout Android: layout_height = "wrap_content" <br/> Android: layout_width = "fill_parent" Android: Orientation = "vertical" <br/> Android: layout_gravity = "TOP"> <br/> <linearlayout Android: Orientation = "horizontal" <br/> Android: layout_gravity = "center_horizontal" Android: layout_margintop = "4.0dip" <br/> Android: layout_height = "wrap_content" Android: layout_width = "wrap_content"> <br/> <button Android: layout_width = "wrap_content" <br/> Android: layout_height = "wrap_content" Android: Id = "@ + ID/btnplayurl" <br/> Android: TEXT = "playing Network Audio"> </button> <br/> <button Android: layout_height = "wrap_content" Android: id = "@ + ID/btnpause" <br/> Android: text = "pause" Android: layout_width = "80dip"> </button> <br/> <button Android: layout_height = "wrap_content" <br/> Android: layout_width = "80dip" Android: text = "stop" Android: id = "@ + ID/btnstop"> </button> <br/> </linearlayout> <br/> <linearlayout Android: orientation = "horizontal" <br/> Android: layout_width = "fill_parent" Android: layout_height = "wrap_content" <br/> Android: layout_marginbottom = "20dip"> <br/> <seekbar Android: paddingright = "10dip" Android: layout_gravity = "center_vertical" <br/> Android: paddingleft = "10dip" Android: layout_weight = "1.0" <br/> Android: layout_height = "wrap_content" Android: layout_width = "wrap_content" <br/> Android: Id = "@ + ID/skbprogress" Android: max = "100"> </seekbar> <br/> </linearlayout> <br/> </framelayout>

Player. Java is the core of this Article. Player. Java implements "progress bar Update", "data buffer", and other functions. Although not complex, it is very useful. Player. Java source code is as follows:

Package COM. musicplayer; </P> <p> Import Java. io. ioexception; <br/> Import Java. util. timer; <br/> Import Java. util. timertask; <br/> Import android. media. audiomanager; <br/> Import android. media. mediaplayer; <br/> Import android. media. mediaplayer. onbufferingupdatelistener; <br/> Import android. media. mediaplayer. oncompletionlistener; <br/> Import android. OS. handler; <br/> Import android. OS. message; <br/> Import Android. util. log; <br/> Import android. widget. seekbar; </P> <p> public class player implements onbufferingupdatelistener, <br/> oncompletionlistener, mediaplayer. onpreparedlistener {<br/> Public mediaplayer; <br/> private seekbar skbprogress; <br/> private timer mtimer = new timer (); <br/> Public player (seekbar skbprogress) <br/>{< br/> This. skbprogress = skbprogress; </P> <p> try {<br/> mediaplayer = New mediaplayer (); <br/> mediaplayer. setaudiostreamtype (audiomanager. stream_music); <br/> mediaplayer. setonbufferingupdatelistener (this); <br/> mediaplayer. setonpreparedlistener (this); <br/>} catch (exception e) {<br/> log. E ("mediaplayer", "error", e); <br/>}</P> <p> mtimer. schedule (mtimertask, 0, 1000 ); <br/>}</P> <p> /*************************** * ************************** <br/> * update the progress bar through the timer and handler <B R/> ************************************* * ***************/<br/> timertask mtimertask = new timertask () {<br/> @ override <br/> Public void run () {<br/> If (mediaplayer = NULL) <br/> return; <br/> If (mediaplayer. isplaying () & skbprogress. ispressed () = false) {<br/> handleprogress. sendemptymessage (0); <br/>}< br/>}; </P> <p> handler handleprogress = new handler () {<br/> Public void handlemessage (Message MSG) {</P> <p> int position = mediaplayer. getcurrentposition (); <br/> int duration = mediaplayer. getduration (); </P> <p> If (duration> 0) {<br/> long Pos = skbprogress. getmax () * position/duration; <br/> skbprogress. setprogress (INT) POS); <br/>}< br/>}; <br/> }; <br/> //********************************** * ****************** </P> <p> Public void play () <br/>{< br/> mediaplayer. start (); <br/>}</P> <p> P Ublic void playurl (string videourl) <br/>{< br/> try {<br/> mediaplayer. reset (); <br/> mediaplayer. setdatasource (videourl); <br/> mediaplayer. prepare (); // automatically play after prepare <br/> // mediaplayer. start (); <br/>}catch (illegalargumentexception e) {<br/> // todo auto-generated Catch Block <br/> E. printstacktrace (); <br/>} catch (illegalstateexception e) {<br/> // todo auto-generated Catch Block <br/> E. printstac Ktrace (); <br/>}catch (ioexception e) {<br/> // todo auto-generated Catch Block <br/> E. printstacktrace (); <br/>}</P> <p> Public void pause () <br/>{< br/> mediaplayer. pause (); <br/>}</P> <p> Public void stop () <br/>{< br/> If (mediaplayer! = NULL) {<br/> mediaplayer. stop (); <br/> mediaplayer. release (); <br/> mediaplayer = NULL; <br/>}</P> <p> @ override <br/>/** <br/> * Playing Through onprepared <br/> */ <br/> Public void onprepared (mediaplayer arg0) {<br/> arg0.start (); <br/> log. E ("mediaplayer", "onprepared"); <br/>}</P> <p> @ override <br/> Public void oncompletion (mediaplayer arg0) {<br/> log. E ("mediaplayer", "oncompletion"); <br/>}</P> <p> @ override <br/> Public void onbufferingupdate (mediaplayer arg0, int bufferingprogress) {<br/> skbprogress. setsecondaryprogress (bufferingprogress); <br/> int currentprogress = skbprogress. getmax () * mediaplayer. getcurrentposition ()/mediaplayer. getduration (); <br/> log. E (currentprogress + "% play", bufferingprogress + "% buffer"); <br/>}</P> <p >}< br/>

Test_musicplayer.java is the main program that calls the player class. The key part is the seekbarchangeevent drag event: the progress of seekbar is 0 ~ The number in seekbar. getmax (), while the mediaplayer. seekto () parameter is 0 ~ Mediaplayer. getduration (). Therefore, the mediaplayer. seekto () parameter is (Progress/seekbar. getmax () * player. mediaplayer. getduration ().

The source code of test_musicplayer.java is as follows:

Package COM. musicplayer; </P> <p> Import android. app. activity; <br/> Import android. OS. bundle; <br/> Import android. view. view; <br/> Import android. view. view. onclicklistener; <br/> Import android. widget. button; <br/> Import android. widget. seekbar; </P> <p> public class test_musicplayer extends activity {<br/> private button btnpause, btnplayurl, btnstop; <br/> private seekbar skbprogress; <br/> private player; </P> <p>/** called when the activity is first created. */<br/> @ override <br/> Public void oncreate (bundle savedinstancestate) {<br/> super. oncreate (savedinstancestate); <br/> setcontentview (R. layout. main); </P> <p> This. settitle ("online music playing --- hellogv writing"); </P> <p> btnplayurl = (button) This. findviewbyid (R. id. btnplayurl); <br/> btnplayurl. setonclicklistener (New clickevent (); </P> <p> btnpause = (button) This. findviewbyid (R. id. btnpause); <br/> btnpause. setonclicklistener (New clickevent (); </P> <p> btnstop = (button) This. findviewbyid (R. id. btnstop); <br/> btnstop. setonclicklistener (New clickevent (); </P> <p> skbprogress = (seekbar) This. findviewbyid (R. id. skbprogress); <br/> skbprogress. setonseekbarchangelistener (New seekbarchangeevent (); <br/> player = new player (skbprogress ); </P> <p >}</P> <p> class clickevent implements onclicklistener {</P> <p> @ override <br/> Public void onclick (view arg0) {<br/> If (arg0 = btnpause) {<br/> player. pause (); <br/>}else if (arg0 = btnplayurl) {<br/> // any search in Baidu MP3, you can try another link <br/> string url = "http: // 219.138.125.22/myweb/MP3/cmp3/jh19.pdf"; <br/> player. playurl (URL); <br/>}else if (arg0 = btnstop) {<br/> player. stop (); <br/>}</P> <p> class seekbarchangeevent implements seekbar. onseekbarchangelistener {<br/> int progress; </P> <p> @ override <br/> Public void onprogresschanged (seekbar, int progress, <br/> Boolean fromuser) {<br/> // originally (Progress/seekbar. getmax () * player. mediaplayer. getduration () <br/> This. progress = progress * player. mediaplayer. getduration () <br/>/seekbar. getmax (); <br/>}</P> <p> @ override <br/> Public void onstarttrackingtouch (seekbar) {</P> <p >}</P> <p> @ override <br/> Public void onstoptrackingtouch (seekbar) {<br/> // seekto () the parameter is a number relative to the video time, rather than a seekbar. number relative to getmax () <br/> player. mediaplayer. seekto (Progress); <br/>}</P> <p>}

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.