import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import android.app.Activity; import android.content.Context; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; /** * http://blog.sina.com.cn/s/blog_68494364010116gk.html * @author reyo * */ public class AudioRecordActivty extends Activity{ private static final String TAG = "AudioRecordActivty"; private static String mFileName = null; private RecordButton mRecordButton = null; private PlayButton mPlayButton = null; private MediaRecorder mRecorder = null; private MediaPlayer mPlayer = null; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); LinearLayout layout = new LinearLayout(this); mRecordButton = new RecordButton(this); layout.addView(mRecordButton,new LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0)); mPlayButton = new PlayButton(this); layout.addView(mPlayButton,new LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0)); setContentView(layout); mFileName = Environment.getExternalStorageDirectory().getPath(); mFileName += "/audiorecordtest.amr"; Log.i("tag", "mFileName="+mFileName); } @Override public void onPause() { super.onPause(); stopRecording(); stopPlaying(); } private void onRecord(boolean start) { if (start) { startRecording(); } else { stopRecording(); } } private void startRecording() { try { mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置麦克风 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);// 设置输出文件格式 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);// 设置编码格式 mRecorder.setOutputFile(mFileName);// 使用绝对路径进行保存文件 mRecorder.prepare(); mRecorder.start(); } catch (IOException e) { Log.e(TAG, "prepare() failed"); } } private void stopRecording() { if(mRecorder!=null){ mRecorder.stop(); mRecorder.release(); mRecorder = null; } } private void startPlaying() { try { mPlayer = new MediaPlayer(); mPlayer.setDataSource(mFileName);//获取绝对路径来播放音频 mPlayer.prepare(); mPlayer.start(); mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub stopPlaying(); mPlayButton.setEnabled(true); } }); mPlayButton.setEnabled(false); } catch (IOException e) { Log.e(TAG, "prepare() failed"); } } private void stopPlaying() { if(mPlayer!=null){ mPlayer.stop(); mPlayer.release(); mPlayer = null; } } class RecordButton extends Button { boolean mStartRecording = true; public RecordButton(Context ctx) { super(ctx); setText("Start recording"); setOnClickListener(clicker); } OnClickListener clicker = new OnClickListener() { public void onClick(View v) { onRecord(mStartRecording); if (mStartRecording) { setText("Stop recording"); } else { setText("Start recording"); } mStartRecording = !mStartRecording; } }; } class PlayButton extends Button { public PlayButton(Context ctx) { super(ctx); setText("Start playing"); setOnClickListener(clicker); } OnClickListener clicker = new OnClickListener() { public void onClick(View v) { startPlaying(); } }; } class Fileter implements FilenameFilter { public boolean accept(File dir, String filename) { // TODO Auto-generated method stub return filename.equals(".amr"); } } /** * 上传文件 * @param urlStr 服务器地址 * @param file 需要上传的文件 * @return 上传是否成功 */ private boolean uploadFile(String urlStr,File file){ try { String end = "\r\n"; String hyphens = "--"; String boundary = "*****"; URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); /* 允许使用输入流,输出流,不允许使用缓存*/ conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false); /* 请求方式*/ conn.setRequestMethod("POST"); conn.setRequestProperty("Charset", "UTF-8"); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary); /* 当文件不为空,把文件包装并且上传*/ Log.e(TAG, file.toString()); if(file != null){ DataOutputStream ds = new DataOutputStream(conn.getOutputStream()); /* name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件 * filename是文件的名字,包含后缀名的 比如:abc.png*/ ds.writeBytes(hyphens + boundary + end); ds.writeBytes("Content-Disposition: form-data; " + "name=\"file1\";filename=\"" + file.getName() +"\"" + end); ds.writeBytes(end); InputStream input = new FileInputStream(file); int size = 1024; byte[] buffer = new byte[size]; int length = -1; /* 从文件读取数据至缓冲区*/ while((length = input.read(buffer)) != -1){ ds.write(buffer, 0, length); } input.close(); ds.writeBytes(end); ds.writeBytes(hyphens + boundary + hyphens + end); ds.flush(); /* 获取响应码*/ // Log.e(TAG, "ResponseCode==="+conn.getResponseCode()); if(conn.getResponseCode() == 200){ return true; } } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } }
MediaRecorder录音,MediaPlayer播放
直接看代码
猜你喜欢
转载自gundumw100.iteye.com/blog/1873803
今日推荐
周排行