最近公司有一个业务,就是通过IM发送音频,我用的是环信的第三方,自定义发送音频,写了一个录音的demo,录制完成之后发送。
这个Demo测试之后感觉还不错,分享一下。
一、添加权限:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
二、XML文件(三个按钮)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button android:id="@+id/btnStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="录音"/>
<Button android:id="@+id/btnStop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止"/>
<Button android:id="@+id/btnPlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="播放"/>
</LinearLayout>
三、Java代码
public class MainActivity extends Activity implements OnClickListener {
private MediaPlayer mediaPlayer;
private MediaRecorder mediaRecorder = new MediaRecorder();
private File audioFile;
private String msg;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnStart = (Button) findViewById(R.id.btnStart);
Button btnStop = (Button) findViewById(R.id.btnStop);
Button btnPlay = (Button) findViewById(R.id.btnPlay);
btnStart.setOnClickListener(this);
btnStop.setOnClickListener(this);
btnPlay.setOnClickListener(this);
}
@Override
public void onClick(View view) {
try {
switch (view.getId()) {
case R.id.btnStart:
// 设置音频来源(一般为麦克风)
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 设置音频输出格式(默认的输出格式)
mediaRecorder
.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
// 设置音频编码方式(默认的编码方式)
mediaRecorder
.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
// 创建一个临时的音频输出文件
audioFile = File.createTempFile("record_", ".amr");
mediaRecorder.setOutputFile(audioFile.getAbsolutePath());
mediaRecorder.prepare();
mediaRecorder.start();
msg = "正在录音...";
break;
case R.id.btnStop:
if (audioFile != null) {
mediaRecorder.stop();
}
msg = "已经停止录音.";
break;
case R.id.btnPlay:
if (audioFile != null) {
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(audioFile.getAbsolutePath());
mediaPlayer.prepare();
mediaPlayer.start();
mediaPlayer
.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
setTitle("录音播放完毕.");
}
});
msg = "正在播放录音...";
}
break;
}
setTitle(msg);
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
} catch (Exception e) {
setTitle(e.getMessage());
}
}
}
注释写的很清楚,但是还是有几点需要说明,我录音完成之后将文件保存到临时文件中,你在手机中是没办法找到的,你可以将你的手机root之后,用RE文件管理器打开指定的目录查看,或者你也可以改变一下文件的路径。