1、增加录音和读写外部存储的权限
修改AndroidManifest.xml:
2、设计界面,修改layout/main.xml
效果如下:
3、修改java代码
package com.example.HelloWorld;import android.app.Activity;import android.media.MediaRecorder;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.widget.TextView;import android.widget.Button;import android.widget.Toast;import android.util.Log;import java.io.File;import java.io.IOException;public class MyActivity extends Activity{ Button startRecordButton; Button stopRecordButton; TextView infoText; MediaRecorder recorder = new MediaRecorder(); boolean isRecording = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); startRecordButton = (Button) findViewById(R.id.start_record); stopRecordButton = (Button) findViewById(R.id.stop_record); stopRecordButton.setEnabled(false); infoText = (TextView)findViewById(R.id.info); final String filePath = Environment.getExternalStorageDirectory() + "/aaaaa.amr"; infoText.setText("保存到"+filePath); startRecordButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { isRecording = true; try { recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 输入源 recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); //设置输出格式 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); //设置编码 recorder.setOutputFile(filePath); //输出文件 recorder.prepare(); //预备! recorder.start(); //开始! startRecordButton.setEnabled(false); stopRecordButton.setEnabled(true); } catch (Exception e) { e.printStackTrace(); infoText.setText(e.getMessage()); } } }); stopRecordButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { recorder.stop(); isRecording = false; startRecordButton.setEnabled(true); stopRecordButton.setEnabled(false); } }); } @Override protected void onDestroy() { if (isRecording) { recorder.stop(); } recorder.release(); super.onDestroy(); }}
录音文件保存到变量filePath对应的路径中。 在startRecordButton被点击后,开始录音。recorder是实例化的MediaRecorder,先依次设置其输入源、输出格式、编码、输出文件,然后prepare()和start()录音就开始了。这时候禁用了startRecordButton以防用户误点。与此同时,默认被禁用的stopRecordButton被启用。 在stopRecordButton被点击后,停止录音,调用stop()函数即可。同时禁用stopRecordButton,激活startRecordButton。 在重写的onDestroy()方法中,会根据布尔变量isRecording判断是否正在录音,若在录音在stop it,然后释放。 初始界面: 开始录音: 生成的音频文件: