一、我的需求:来电后,我的三方应用主动开启录音,挂断后结束录音,查验音频
我遇到的问题:录制的音频没有声音。
通过各种尝试,结果如下 :设置不同的录音来源的效果
MediaRecorder API\创建MediaRecorder | 正常情况创建 | 两个应用同时创建 | 来电时创建 | 备注 |
MediaRecorder.AudioSource.DEFAULT | 音频有声音 | 后者start异常 | 音频无声音 | 默认音频源 |
MediaRecorder.AudioSource.MIC | 音频有声音 | 后者start异常 | 音频无声音 | 设定录音来源为主麦克风 |
MediaRecorder.AudioSource.VOICE_CALL | start异常 | start异常 | start异常 | 设定录音来源为语音拨出的语音与对方说话的声音 |
二、暂时的结论是:录制来电语音.音频来源于VOICE_CALL ,而该来源需要CAPTURE_AUDIO_OUTPUT权限,该权限仅授予系统应用程序,而不授予第三方应用程序
三、试错过程中遇到的问题以及解说
1.未申请权限,动态申请或者权限标签用错了,permission 改成 uses-permission
<!-- <permission android:name="android.permission.RECORD_AUDIO"/>-->
<!-- <uses-permission android:name="android.Manifest.permission.READ_EXTERNAL_STORAGE" />-->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2.音频来源设置
MediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC)
以上方法参数就是选择录音源的,其可选参数如下:
MediaRecorder.AudioSource.CAMCORDER
设定录音来源于同方向的相机麦克风相同,若相机无内置相机或无法识别,则使用预设的麦克风
MediaRecorder.AudioSource.DEFAULT 默认音频源
MediaRecorder.AudioSource.MIC
设定录音来源为主麦克风。
MediaRecorder.AudioSource.VOICE_CALL
设定录音来源为语音拨出的语音与对方说话的声音
MediaRecorder.AudioSource.VOICE_COMMUNICATION
摄像头旁边的麦克风
MediaRecorder.AudioSource.VOICE_DOWNLINK
下行声音
MediaRecorder.AudioSource.VOICE_RECOGNITION
语音识别
MediaRecorder.AudioSource.VOICE_UPLINK
上行声音
3.设置MediaRecorder.AudioSource.VOICE_CALL异常,尝试直接CAPTURE_AUDIO_OUTPUT权限申请不通过
MediaRecorder.AudioSource.VOICE_CALL 源需要CAPTURE_AUDIO_OUTPUT权限,该权限仅授予系统应用程序,而不授予第三方应用程序 .
4.同一时间只看开启一个MediaRecorder
实验证明,一台手机同一时间不能创建两个MediaRecoder,一个应用先创建MediaRecorder,另一个应用创建就会异常
当我的应用提前创建了MediaRecorder并且start后,系统通话录音应用也会有影响,
以小米手机为例,miui12.0.6 系统,先开启我的应用录音,系统电话界面的录音我们手动开启,显示可以录音,但打完电话后,查看实际录音文件,录音时长只有一秒,且没声音。
5.当开启电话,使用MediaRecorder设置任何录音source,音频都没有什么声音
应该是来电音频来源在Voice_call上, 但三方应用又没有设置该来源Voice_call的权限、