录音

来源:互联网 发布:淘宝品牌004 编辑:程序博客网 时间:2024/04/27 18:25

 闲着无聊把以前的写的东西整理下

public classMainActivity extendsAppCompatActivity implements View.OnClickListener {
privateButton bt_start,bt_stop;
privateListView lv;
privateFile mRecAudioPath;
List<String>list= newArrayList<String>();
privateFile mRecAudioFile;
privateMediaRecorder mMediaRecorder;
privateString strTempFile="录音_";
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecAudioPath= getSDPathFile();
initView();
initData();
initListener();

}
private voidinitView(){
bt_start= (Button) findViewById(R.id.bt_start);
bt_stop= (Button) findViewById(R.id.bt_stop);
lv= (ListView) findViewById(R.id.lv);
bt_start.setEnabled(true);
bt_stop.setEnabled(false);

}
private voidinitData(){
list=getData();
ArrayAdapter adapter =new ArrayAdapter(this,android.R.layout.simple_list_item_1,list);
lv.setAdapter(adapter);
}
private voidinitListener(){
bt_stop.setOnClickListener(this);
bt_start.setOnClickListener(this);
lv.setOnItemClickListener(newAdapterView.OnItemClickListener() {
@Override
public voidonItemClick(AdapterView<?> parent, View view,int position, longid) {
File file =new File(mRecAudioPath.getAbsolutePath()+"/"+list.get(position));
play(file);
}
});
}

@Override
public voidonClick(View v) {
switch(v.getId()){
caseR.id.bt_start:
try{
//1实例化MediaRecorder对象
mMediaRecorder= newMediaRecorder();
//2设置麦克风
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//3设置输出文件的格式:
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//4设置音频文件的编码
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//5设置输出文件路径
try{
mRecAudioFile= File.createTempFile(strTempFile,".amr",mRecAudioPath);
}catch (IOException e) {
e.printStackTrace();
}
mMediaRecorder.setOutputFile(mRecAudioFile.getAbsolutePath());
//6准备
mMediaRecorder.prepare();
//7开始
mMediaRecorder.start();
//按钮状态
bt_start.setEnabled(false);
bt_stop.setEnabled(true);
}catch (Exception e) {
e.printStackTrace();
}
break;

caseR.id.bt_stop:
if(mRecAudioFile!=null){
//停止录音
mMediaRecorder.stop();
//释放MediaRecorder
mMediaRecorder.release();
mMediaRecorder=null;
//按钮状态
bt_start.setEnabled(true);
bt_stop.setEnabled(false);

initData();
}
break;
default:break;
}
}

/**
* 1 得到SD卡的路径
*@return
*/
privateFile getSDPathFile(){
File file =null;
//检测是否SD卡是否存在
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
file =Environment.getExternalStorageDirectory();
}else{
Toast.makeText(MainActivity.this,"没有SD卡",Toast.LENGTH_LONG).show();
}
returnfile;
}

/**
* 2获取数据源 写一个Filter 接口继承 FilenameFilter
*@return
*/
//Filter接口
public class MusicFilter implementsFilenameFilter {
@Override
public booleanaccept(File dir, String filename) {
returnfilename.endsWith(".amr");
}
}

//数据源
publicList<String> getData(){
List<String> musiclist =new ArrayList<String>();
File file =mRecAudioPath;
if(file.listFiles(newMusicFilter())!=null){
if(file.listFiles(newMusicFilter()).length>0){
for(File file1:file.listFiles(newMusicFilter())){
musiclist.add(file1.getName());
}
}
}

returnmusiclist;
}

/**
* 3播放方法
*@param file
*/
private voidplay(File file){
Intent intent =new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(file);
intent.setDataAndType(uri,"audio/mp3");
startActivity(intent);

}
注 最后在 AndroidManifest中加入权限
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permissionandroid:name="android.permission.RECORD_AUDIO"/>

原创粉丝点击