【问题标题】:Voice Call recording in android using MediaRecorder使用 MediaRecorder 在 android 中录制语音通话
【发布时间】:2014-06-10 11:00:54
【问题描述】:

我在录制通话时遇到问题我已进行服务并拨打了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() 上抛出 recoder 失败的异常;

那么,我怎样才能录制语音通话呢?

【问题讨论】:

    标签: android mediarecorder telephonymanager


    【解决方案1】:

    一年前我也有同样的疑问AudioSource.VOICE_CALL not working in android 4.0 but working in android 2.3

    recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 适用于有限的设备,它只会在不支持语音通话的设备上发出异常,因此请捕获异常并重新从麦克风开始录制,这将使您在不受支持的设备中处于更安全的一边。

    【讨论】:

    • 那么在这种情况下我该怎么办?
    • 当我使用 .MIC 时,它不会记录传入的声音它只记录我的声音
    • 你正在使用哪个设备
    • audioSource = MediaRecorder.AudioSource.CAMCORDER;试试这个
    • 我已经发布了通话记录应用程序并在note 3、note2、note 1、galaxy grand quattro 上进行了测试,但在galaxy grand quattro 中,语音通​​话不起作用,所以我在那里使用了摄像机
    【解决方案2】:

    我认为我们不听对方声音的问题是无障碍访问。 需要打开录音机应用程序的辅助功能。这样,问题将得到解决。 也可以使用 recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);

    【讨论】:

    【解决方案3】:

    只要音量低,您就无法录制来电者的声音。这在编程上是不可能的,因为 AudioRecorder 或 MediaRecorder 只能通过麦克风录制。您唯一能做的就是将扬声器的音量设置得尽可能大。

    将 AudioSoucre 更改为 .MIC 将无济于事,还有一个未解决的问题:

    https://code.google.com/p/android/issues/detail?id=4075

    这个问题到现在还没有解决,我想以后也不会解决,因为大多数国家都不允许录音

    【讨论】:

    • 即使音量已满,来电也不记录
    • 我认为这取决于设备。我很久以前就用我的三星 Galaxy S3 尝试过这样的事情,这很有效....您正在创建哪个音频文件?我使用 .wav 文件,因为它有最好最清晰的声音。
    • 我正在创建 .amr 文件并使用 htc 一部 S 手机
    • .wav 文件的结果相同
    • 使用 audioSource = MediaRecorder.AudioSource.CAMCORDER 正在工作,但声音的音量确实很低
    【解决方案4】:

    MIC 的音频源应记录来电。您可以将录音音量设置为最大音量并打开扬声器,如下所示:

    //录制前 音频管理器音频管理器;

        //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 即可了解每个常量的工作原理

    【讨论】:

    • 是的,通过使用 Voice_Call 和 Voice_communication,我在 recorder.start() 遇到了录音机失败异常
    • 那是因为您使用的设备不支持其中任何一个。我在应用程序中使用 MIC,它工作正常。即使您像我在回答中所做的那样提高系统音量并打开扬声器,也会出现问题吗?
    • 您是否也在其他设备上进行过测试?
    • MIC 的音频源应该记录来电 -- 你确定吗?
    • @CopsOnRoad 是的,我添加了“您可以将录音音量设置为最大并打开扬声器”.. 当您这样做时,可以通过麦克风记录通话
    猜你喜欢
    • 2013-03-24
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多