我在录制通话时遇到问题我已拨打电话并拨打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.start();
上抛出重新编码失败的异常那么,我该如何录制语音通话?
答案 0 :(得分:4)
一年前我也有同样的疑问AudioSource.VOICE_CALL not working in android 4.0 but working in android 2.3
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 在有限的设备上工作,它只会在不支持语音呼叫的设备上提供例外,因此请抓住异常并重新开始麦克风录音,这将使您在不受支持的设备上更安全。
答案 1 :(得分:0)
我认为我们不听对方声音的问题是无障碍访问。 需要打开记录器应用程序的辅助功能。这样问题就会得到解决。 也使用 recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
答案 2 :(得分:-1)
只要音量较低,您就无法录制来电者的声音。它在编程上是不可能的,因为AudioRecorder或MediaRecorder只能通过麦克风录音。您唯一能做的就是尽可能大地设置扬声器的音量。
将AudioSoucre更改为.MIC无济于事,有一个未解决的问题:
https://code.google.com/p/android/issues/detail?id=4075
此问题直到现在才解决,我认为将来不会修复,因为大多数国家/地区都不允许录制电话
答案 3 :(得分:-1)
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()一起使用,只需按照guide了解每个常量如何工作