使用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

上一篇: Voice Call recording in android using MediaRecorder

下一篇: Send a Voice data During A call