Complete Project (source code): http://download.csdn.net/detail/zhujinghao09/5313666
The implementation of the recording function, at the beginning, uses the Android system to bring its own recording class, but its encoding method, PC's windowsmediaplayer does not recognize that it cannot be played, so you can find a non-compressed recording class from the Internet, the format of the recording file is the same as that of windows.
This recording category will not be posted here. If you are interested, you can find it on the EOE forum or download the source code of my project, which contains
Here, we simply use it to generate a non-compressed recording file:
/*** Recording WAV format file * @ Param path: file path */public static file recordchat (extaudiorecorder, string savepath, string filename) {file dir = new file (savepath); // If the directory does not exist, create the directory if (dir. list () = NULL) {dir. mkdirs ();} // obtain the recording file = new file (savepath + filename); // set the output file extaudiorecorder. setoutputfile (savepath + filename); extaudiorecorder. prepare (); // start the recording extaudiorecorder. start (); Return file;}/** stop recording * @ Param mediarecorder the recorder to be stopped * @ return returns */public static void stoprecord (final extaudiorecorder) {extaudiorecorder. stop (); extaudiorecorder. release ();}
// Recording button
Btnrecod. setonclicklistener (New button. onclicklistener () {@ overridepublic void onclick (view arg0) {int H = new date (). gethours (); int M = new date (). getminutes (); int S = new date (). getseconds (); string strtime = string. valueof (h) + "-" + String. valueof (m) + "-" + String. valueof (s); // obtain the system time name file string savepath = "sdcard/myvoice/"; string filename = "extaudio" + strtime + ". wav "; // todo auto-generated method stubextaudiorecorder = extaudiorecorder. getinstanse (false); // uncompressed recording (WAV) recordchat (extaudiorecorder, savepath, filename); // mrecorder. onstart ("er" + strtime); // lastrecordpath = "sdcard/myvoice/" + "er" + strtime + ". amr "; lastrecordpath = savepath + filename; // global variable }});
Stop recording button
Btnstop. setonclicklistener (New button. onclicklistener () {@ overridepublic void onclick (view arg0) {// todo auto-generated method stub // mrecorder. onstop (); stoprecord (extaudiorecorder); vpatharraylist. add (lastrecordpath); updatevoicelistview (vpatharraylist); // Add the recording file path to the sound list }});
The playback function is a mediaplayer that comes with the Android system.
Playback class:
Package er. fly; import Java. io. ioexception; import android. media. mediaplayer; public class mymediaplay {mediaplayer; Public void onplay (string namepath) {mediaplayer = new mediaplayer (); If (mediaplayer. isplaying () {mediaplayer. reset ();} Try {mediaplayer. setdatasource (namepath); mediaplayer. prepare (); mediaplayer. start (); mediaplayer. setoncompletionlistener (New mediaplayer. oncompletionlistener () {@ overridepublic void oncompletion (mediaplayer arg0) {// todo auto-generated method stubmediaplayer. release () ;}});} catch (illegalargumentexception e) {// todo auto-generated catch blocke. printstacktrace ();} catch (illegalstateexception e) {// todo auto-generated catch blocke. printstacktrace ();} catch (ioexception e) {// todo auto-generated catch blocke. printstacktrace () ;}} public void onstop () {mediaplayer. stop (); mediaplayer. release (); mediaplayer = NULL ;}}
The playback and sent file paths are read from the sound list.
Btnplay. setonclicklistener (New button. onclicklistener () {@ overridepublic void onclick (view arg0) {log. I (TAG, "play" + playsendpath); If (playsendpath! = NULL) {mplay. onplay (playsendpath); tvrecvcount. settext ("");} elsetoast. maketext (mainactivity. This, "select the sound to play !! ", Toast. length_long ). show (); playsendpath = NULL ;}}); btnsend. setonclicklistener (New button. onclicklistener () {string Path = NULL; file; // = new file ("sdcard/myrecvvoice/androidrecv1_"); @ overridepublic void onclick (view arg0) {// todo auto-generated method stubif (playsendpath! = NULL) {file = new file (playsendpath);} else {toast. maketext (mainactivity. This, "select the sound to send !! ", Toast. length_long ). show (); return;} playsendpath = NULL; upfile = new upfile (client); upfile. setfile (File); upfile. start ();}});
Where
Playsendpath is a global variable that changes its value by selecting a group in the list control.
Public void updatevoicelistview (arraylist <string> Al) {string [] STR = new string [Al. size ()]; for (INT I = 0; I <Al. size (); I ++) {STR [I] = Al. get (I);} arrayadapter <string> AAD = new arrayadapter <string> (this, android. r. layout. simple_list_item_checked, STR); setlistadapter (AAD);} public void onlistitemclick (listview parent, view V, int position, long ID) {checkedtextview item = (checkedtextview) V; string Path = vpatharraylist. get (position); log. I (TAG, PATH); playsendpath = path ;}
Finally, the main thread processes messages from sub-threads: The main function is to update the control status of the main interface.
Package er. fly. nettandclient; import Java. util. arraylist; import android. OS. handler; import android. OS. logoff; import android. OS. message; import android. util. log; import android. widget. textview; public class myhandler extends handler {textview tvrecvcount; string tag = "myhandler"; // arraylist <string> voicealist; Public myhandler (Looper loler) {super (Looper );} public void sethandlerargs (textview TV) {tvrecvcount = TV ;}@ override public void handlemessage (Message MSG) {// process the message mainactivity MA = new mainactivity (); string path; string dflag = "downloadfile:"; string strmsg = MSG. OBJ. tostring (); log. I (TAG, strmsg); If (strmsg. indexof (dflag) = 0) {int index1 = strmsg. indexof ("#"); int index2 = strmsg. indexof ("$"); If (index1> 0) {Path = strmsg. substring (dflag. length (), index1); log. I (TAG, PATH); mainactivity. vpatharraylist. add (PATH); log. I (TAG, strmsg. substring (index1 + 1); tvrecvcount. settext (strmsg. substring (index1 + 1);} If (index2> 0) {log. I (TAG, strmsg. substring (index2 + 1); tvrecvcount. settext (strmsg. substring (index1 + 1 ));}}}}
By now, the basic functions of the entire project can be implemented. If you are interested, refer to them.
Complete Project (source code): http://download.csdn.net/detail/zhujinghao09/5313666