浅入浅出Android(008):使用MediaRecorder录音

霸气de小男生 提交于 2019-12-22 19:57:07

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

使用MediaRecorder既可以录音也可以录像。本文先只讲如何录音。测试的系统是android4。

1、增加录音和读写外部存储的权限

修改AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.HelloWorld"
          android:versionCode="1"
          android:versionName="1.0">
    <uses-sdk android:minSdkVersion="14"/>

  
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <activity android:name="MyActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>



2、设计界面,修改layout/main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="录音"
            />

    <TextView
            android:id="@+id/info"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="运行信息:"
            />

    <Button
        android:id="@+id/start_record"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开始录音"
        />
    <Button
            android:id="@+id/stop_record"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="停止录音"
            />


</LinearLayout>



效果如下:


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,然后释放。

初始界面:



开始录音:


生成的音频文件:



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!