MediaRecorder可以实现录音和录像,使用MediaRecorder录音录像时需要严格遵守API说明中的函数调用先后顺序,否则不能成功执行。
CSDN 地址:http://blog.csdn.net/xiangyong_1521/article/details/50681230 官方说明:http://developer.android.com/reference/android/media/MediaRecorder.html
2017年10月16日拓展:
主要代码
package com.example.book_mediarecorder;
import java.io.File;
import java.sql.Date;
import java.text.SimpleDateFormat;
import android.app.Activity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
Boolean isRecording=false;
TextView rTimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button button = (Button) findViewById(R.id.bRecourd);
rTimer = (TextView) findViewById(R.id.rTimer);
if (isRecording) {
button.setText("正在录制中...");
}else{
button.setText("开始录制");
}
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (!isRecording) {
isRecording=true;
button.setText("正在录制中...");
startRecord();
}else{
isRecording=false;
button.setText("开始录制");
stopRecord();
}
}
});
}
private MediaRecorder mr=null;
int Count;
//开始录制
private void startRecord() {
if (mr == null) {
File dir = new File(Environment.getExternalStorageDirectory(), "sounds"); //创建音频存放的目录
if (!dir.exists()) {
dir.mkdirs();
}
File soundFile = new File(dir, getCurrentTime()+".amr"); //创建的音频名称
if (!soundFile.exists()) {
try {
soundFile.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
}
mr = new MediaRecorder();
mr.setAudioSource(MediaRecorder.AudioSource.MIC);//拿到机器的MIC
mr.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB);//设置输出格式
mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);//设置编码格式
mr.setOutputFile(soundFile.getAbsolutePath());
try {
mr.prepare();
mr.start();
} catch (Exception e) {
e.printStackTrace();
}
Count = 0;
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
if (Count == 1800) {//限制录制时间1800s
mr.stop();
mr.release();
mr = null;
}
Count ++;
str = showTimeCount((long)Count)+"/30:00";
rTimer.setText(str);
if (handler!=null) {
handler.postDelayed(this, 1000);
}
}
};
runnable.run();
}
}
Handler handler;
Runnable runnable ;
String str;
//停止录制
private void stopRecord() {
if (mr != null) {
mr.stop();
mr.release();
mr = null;
}
str="";
handler=null;
runnable=null;
}
//获取当前时间,以其为名来保存录音
private String getCurrentTime(){
SimpleDateFormat format=new SimpleDateFormat("yyyyMMddHHmmss");
Date date=new Date(System.currentTimeMillis());
String str=format.format(date);
return str;
}
////将时间转为计时格式
String showTimeCount(long time){
String s = null;
if (time <= 59) {
s = "00:";
return time<10 ? s+"0"+String.valueOf(time) : s+String.valueOf(time);
}else{
return (time%60 <10 ? s+"0"+String.valueOf(time) : s+String.valueOf(time))+ ":"+(time/60<10 ? s+"0"+String.valueOf(time) : s+String.valueOf(time));
}
}
}
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>