今天在做一个简单的录音机的时候,录音机老是无法正常实例化,不能使用,后来查找问题,一个一个的试,最后确定了,原来是两个设置写反了,却造成了,无法正常工作,真是郁闷啊。找了一个教程看了一下,教程中也没有提,这两个不能写反,就当给自己一个警告吧,也希望看到的人,不知道这个问题的人能记住。下面把代码放到下面:
package com.RecordTest;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Toast;
public class RecordTest extends ListActivity {
Button btn1, btn2;
int currertindex = 0;
private MediaRecorder mediarecorder; // 创建录音机
File recordFile = null;
File sdcardPath = null;// 录音文件目录
String Tempfile = "Record_temp_";
List<String> fileList = new ArrayList<String>();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
sdcardPath = Environment.getExternalStorageDirectory();
setTitle(sdcardPath.getName());
} else {
Toast.makeText(RecordTest.this, "没有SD卡", 1000).show();
}
getRecordList();
btn1 = (Button) findViewById(R.id.btn1);
btn2 = (Button) findViewById(R.id.btn2);
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
try {
recordFile = File.createTempFile(Tempfile, ".amr",
sdcardPath);
Log.i("aaaaa", "1");
mediarecorder = new MediaRecorder();
Log.i("aaaaa", "2");
mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置麦克风
Log.i("aaaaa", "3");
mediarecorder
.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); //设置输出文件格式
Log.i("aaaaa", "4");
mediarecorder
.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); // 设置编码格式
Log.i("aaaaa", "5");
mediarecorder.setOutputFile(recordFile.getAbsolutePath()); // 使用绝对路径进行保存文件
Log.i("aaaaa", "6");
mediarecorder.prepare();
mediarecorder.start();
Toast.makeText(RecordTest.this, "开始", Toast.LENGTH_LONG).show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
btn2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
try {
if (recordFile != null) {
mediarecorder.stop();
fileList.add(recordFile.getName());
ArrayAdapter<String> list = new
ArrayAdapter<String>(RecordTest.this,
R.layout.itemlist, R.id.listitem, fileList);
setListAdapter(list);
mediarecorder = null;
Toast.makeText(RecordTest.this, "停止", Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Log.i("eeeee", e.getMessage());
}
}
});
}
void getRecordList() {
// 首先检测是否存在SDCard
try {
File home = sdcardPath;
fileList.clear();
if (home.list(new Fileter()).length > 0) {
for (File file : home.listFiles(new Fileter())) {
fileList.add(file.getName());
}
ArrayAdapter<String> list = new ArrayAdapter<String>(this,
R.layout.itemlist, R.id.listitem, fileList);
setListAdapter(list);
}
} catch (Exception e) {
Toast.makeText(RecordTest.this, e.getMessage(), 1000).show();
}
}
class Fileter implements FilenameFilter {
public boolean accept(File dir, String filename) {
// TODO Auto-generated method stub
return filename.equals(".amr");
}
}
}
在使用过程中,需要加入操作SD卡和使用录音设备的权限,即在AndroidManifest.xml中加入:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
然后就可以使用了,如果有问题,欢迎大家指正!