|
|
@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
package com.record;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import android.annotation.SuppressLint;
|
|
|
|
|
|
|
|
import android.app.Activity;
|
|
|
|
|
|
|
|
import android.os.Bundle;
|
|
|
|
|
|
|
|
import android.view.View;
|
|
|
|
|
|
|
|
import android.media.MediaRecorder;
|
|
|
|
|
|
|
|
import android.os.Environment;
|
|
|
|
|
|
|
|
import android.view.Window;
|
|
|
|
|
|
|
|
import android.widget.Button;
|
|
|
|
|
|
|
|
import android.widget.Toast;
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@SuppressLint("Registered")
|
|
|
|
|
|
|
|
public class RecordActivity extends Activity implements View.OnClickListener {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Button startRecording, stopRecording, pauseRecording;//开始录音、停止录音、释放资源
|
|
|
|
|
|
|
|
MediaRecorder recorder;
|
|
|
|
|
|
|
|
File audioFile; //录音保存的文件
|
|
|
|
|
|
|
|
boolean isRecoding = false;// true 表示正在录音
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void onCreate(Bundle savedInstanceState) {
|
|
|
|
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
|
|
|
|
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
|
|
|
|
|
|
|
setContentView(R.layout.activity_main);
|
|
|
|
|
|
|
|
init();
|
|
|
|
|
|
|
|
initListener();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//初始化
|
|
|
|
|
|
|
|
public void init() {
|
|
|
|
|
|
|
|
stopRecording = (Button) this.findViewById(R.id.btn_stop);
|
|
|
|
|
|
|
|
startRecording = (Button) this.findViewById(R.id.btn_play);
|
|
|
|
|
|
|
|
pauseRecording = (Button) this.findViewById(R.id.btn_pause);
|
|
|
|
|
|
|
|
if (!path.exists()) {
|
|
|
|
|
|
|
|
path.mkdirs();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//初始化麦克风
|
|
|
|
|
|
|
|
private void InitMedia(){
|
|
|
|
|
|
|
|
recorder = new MediaRecorder();
|
|
|
|
|
|
|
|
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置播放源 麦克风
|
|
|
|
|
|
|
|
recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB); //设置输入格式 3gp
|
|
|
|
|
|
|
|
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //设置编码AMR
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//设置监听器
|
|
|
|
|
|
|
|
public void initListener() {
|
|
|
|
|
|
|
|
startRecording.setOnClickListener(this);
|
|
|
|
|
|
|
|
stopRecording.setOnClickListener(this);
|
|
|
|
|
|
|
|
pauseRecording.setOnClickListener(this);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//此处还应该对手机进行下判断,判断下手机里面有没有内存卡
|
|
|
|
|
|
|
|
//保存在SD卡下MediaRecorderTest文件夹中
|
|
|
|
|
|
|
|
File path = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MediaRecorderTest");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//录音
|
|
|
|
|
|
|
|
public void recod() {
|
|
|
|
|
|
|
|
InitMedia();
|
|
|
|
|
|
|
|
int i = (int) (Math.random() * 10000);
|
|
|
|
|
|
|
|
String a = Integer.toString(i);
|
|
|
|
|
|
|
|
String b = "Voice";
|
|
|
|
|
|
|
|
String FileName = b + a;
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
audioFile = new File(path, FileName + ".aac");
|
|
|
|
|
|
|
|
//audioFile=new File(path,"ycc.aac");
|
|
|
|
|
|
|
|
if (audioFile.exists()) {
|
|
|
|
|
|
|
|
audioFile.delete();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
audioFile.createNewFile();//创建文件
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
|
|
throw new RuntimeException("Couldn't create recording audio file", e);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
recorder.setOutputFile(audioFile.getAbsolutePath()); //设置输出文件
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
recorder.prepare();
|
|
|
|
|
|
|
|
} catch (IllegalStateException e) {
|
|
|
|
|
|
|
|
throw new RuntimeException("IllegalStateException on MediaRecorder.prepare", e);
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
|
|
throw new RuntimeException("IOException on MediaRecorder.prepare", e);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
isRecoding = true;
|
|
|
|
|
|
|
|
recorder.start();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
|
|
|
//开始录音
|
|
|
|
|
|
|
|
while (true){
|
|
|
|
|
|
|
|
if (v == startRecording) {
|
|
|
|
|
|
|
|
Toast.makeText(RecordActivity.this, "开始录音", Toast.LENGTH_SHORT).show();
|
|
|
|
|
|
|
|
recod();
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (v == pauseRecording) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//停止录音
|
|
|
|
|
|
|
|
if (v == stopRecording) {
|
|
|
|
|
|
|
|
if (isRecoding) {
|
|
|
|
|
|
|
|
Toast.makeText(RecordActivity.this, "录音结束,文件已存至/MediaRecorderTest", Toast.LENGTH_SHORT).show();
|
|
|
|
|
|
|
|
recorder.stop();//调用stop之后recorder会被清空,再次录音要再次初始化recorder
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|