权限:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
RECORD_AUDIO 录音 WRITE_EXTERNAL_STORAGE 不加无法写入 READ_EXTERNAL_STORAGE 不加录不全
代码:
MediaRecorder mediaRecorder=new MediaRecorder(); //创建MediaRecorder
mediaRecorder.reset(); //重置MediaRecorder参数
mediaRecorder.setAudioSource( MediaRecorder.AudioSource.MIC ); //设置音频来源,MediaRecorder.AudioSource.MIC表示麦克风
mediaRecorder.setOutputFile( file ); //设置输出文件
mediaRecorder.setOutputFormat( MediaRecorder.OutputFormat.RAW_AMR ); //设置输出格式,MediaRecorder.OutputFormat.RAW_AMR表示 .arm文件格式
mediaRecorder.setAudioEncoder( MediaRecorder.AudioEncoder.AMR_NB ); //设置音频编码(方式),MediaRecorder.AudioEncoder.AMR_NB表示 .arm编码器
mediaRecorder.prepare(); //媒体录音机进入准备状态mediaRecorder.start(); //开始录音
mediaRecorder.pause(); //暂停
mediaRecorder.resume(); //继续
mediaRecorder.stop(); //中止录音,此时生成文件完成
mediaRecorder.release(); //释放资源,防止占用内存
注意:
1. 要在各项参数设置前重置MediaRecorder(参数) .reset()
2. 不设置音频来源会导致生成的文件无音轨 .setAudioSource()
参数使用MediaRecorder.AudioSource.MIC表示麦克风输入
3. 不设置输出文件将无法生成文件 .setOutputFile( ~ )
4. 设置输出格式用于设置文件类型 .setOutputFormat( ~ )
参数使用MediaRecorder.OutputFormat.RAW_AMR表示 .amr文件格式
5. 需要设置音频编码(方式) .setAudioEncoder( ~ )
参数使用MediaRecorder.AudioEncoder.AMR_NB表示 .amr编码器
6. 要在各项参数设置后使媒体录音机进入准备状态 .prepare()
7. MediaRecorder的使用
开始录音.start()
暂停.pause()
继续.resume()
中止录音.stop()此时文件生成完成
释放资源.release()防止占用资源
8. 权限三项都要
RECORD_AUDIO 录音
WRITE_EXTERNAL_STORAGE 不加无法写入文件
READ_EXTERNAL_STORAGE 不加录音只会有一小段(几秒),因录音机是不断在之前文件添加新音频并覆盖,无读取权限则只会进行覆盖
常见问题:
1. Android媒体录音机MediaRecorder录制出的文件只有几秒甚至几毫秒,原因可能是未添加文件读取权限(READ_EXTERNAL_STORAGE)。录音机录制时,每几毫秒会录制一次,新录制到的音频会添加至之前的音频文件末端,然后覆盖旧音频文件;如果没有文件读取权限,每次录制到的新音频只会覆盖旧音频文件回车。