录音还涉及到录音文件的存储,即文件的操作。首先检查sd卡是否存在,然后再sd卡根目录下建立一个文件夹:myRecords。接着在该文件夹下创建录音文件,文件名我采用系统的当前时间命名。这样既能显示录音文件的录制时间,又能保证文件名的唯一性。
下面是工具类中抽取的部分方法:
/**
* 判断sd卡是否存在
* @return
*/
public static boolean sdcardIsExist(){
return Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
}
/**
* 在SD卡指定文件夹下创建文件,如果不存在该目录则创建该目录
* @param dirName
* @param fileName
* @return
* @throws IOException
*/
public static File creatSDFile(String dirName,String fileName) throws IOException {
//创建目录
File dir = creatSDDir(dirName);
//创建文件
File file = new File(dir.getAbsolutePath(),fileName);
Log.i("tag", "dir.gee---->"+dir.getAbsolutePath());
file.createNewFile();
return file;
}
/**
* 在SD卡根目录上创建文件夹,如果不存在,则创建
* @param dirName
* @return
*/
public static File creatSDDir(String dirName) {
File dir = new File(getSdRootDir()+java.io.File.separator+dirName);
if(!dir.exists())
dir.mkdir();
return dir;
}
下面介绍MediaRecorder类在录音中的简单使用:
开始录音:
<span style="font-family:Microsoft YaHei;font-size:18px;">MediaRecorder mediaRecorder = new MediaRecorder();
// 设置声音来源于mic话筒
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 设置输出格式
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
// 设置解码类型
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
// 设置输出到文件
mediaRecorder.setOutputFile(recordFile.getAbsolutePath());
// 录音准备
mediaRecorder.prepare();
// 开始录音
mediaRecorder.start();</span>
停止录音:
<span style="font-family:Microsoft YaHei;">// 停止录音
private void stopRecord() {
if (mediaRecorder != null && isRecoding) {
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
}
}</span>
<span style="font-family:Microsoft YaHei;">/**
* 当点击返回键时,提示是否保存
*/
@Override
public void onBackPressed() {
if (isRecoding) {
new AlertDialog.Builder(this).setTitle("系统提示!")
.setMessage("正在录音,请保存后返回。").create().show();
return;
} else {
super.onBackPressed();
}
}</span>
一般还要重写onDestory()方法,释放MediaRecorder资源
<span style="font-family:Microsoft YaHei;">/**
* 释放mediaRecorder
*/
@Override
protected void onDestroy() {
super.onDestroy();
if(mediaRecorder!=null&&!isRecoding)
{
mediaRecorder.release();
mediaRecorder=null;
}
}</span>