Android麦克风录音的实现

最近公司有一个业务,就是通过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文件管理器打开指定的目录查看,或者你也可以改变一下文件的路径。

 

猜你喜欢

转载自blog.csdn.net/u014752325/article/details/53138061