使用MediaRecorder在Android中进行语音通话记录
我在录制一个电话时遇到问题,我已经创建了一个服务,并且调用BroadcastReceiver
来获取呼叫状态。 在接到呼叫时在TelephonyManager.EXTRA_STATE_OFFHOOK
。 我正在使用以下代码来记录呼叫
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
recorder.setOutputFile(audiofile.getAbsolutePath());
try {
recorder.prepare();
recorder.start();
}
catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception ex)
{
ex.printStackTrace();
}
此代码工作正常,并创建音频文件,但是当我收听音频文件时,我只能听我的传出语音,不会录制来电语音。
当我使用
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
代替
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
在上面的代码中,它抛出recoder异常失败recoder.start();
那么,我该如何录制语音通话?
一年前我也有同样的疑问AudioSource.VOICE_CALL不能在android 4.0中工作,但在android 2.3中工作
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 在有限的设备上工作,它只会在不支持语音通话的设备上发出异常声音,因此赶上例外情况,并再次从麦克风开始录音,这将使您在不受支持的设备中保持安全。
只要音量很低,您就无法录制来电者的声音。 它在编程上是不可能的,因为AudioRecorder或MediaRecorder只能通过麦克风录音。 您唯一能做的就是尽可能大声地从扬声器设置音量。
将AudioSoucre更改为.MIC无助于解决问题:
https://code.google.com/p/android/issues/detail?id=4075
这个问题到现在为止还没有解决,我认为它将来不会被修复,因为大多数国家都不允许录音电话
MIC的音频源应记录来电。 您可以将录音音量设置为最高级别,然后按以下方式打开扬声器:
//记录之前AudioManager audioManager;
//turn on speaker
audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setSpeakerphoneOn(true);
//increase Volume
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL), 0);
//开始录制
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
File audioFile = File.createTempFile("temp", "3gp", path);
recorder.setOutputFile(audioFile.getAbsolutePath());
recorder.prepare();
recorder.start();
另外还有其他常量可以与setAudioSource()一起使用,只需按照指南了解每种工作方式
链接地址: http://www.djcxy.com/p/75463.html