无法在 Android 中录制来电和去电的音频

Posted

技术标签:

【中文标题】无法在 Android 中录制来电和去电的音频【英文标题】:Unable to record audio of Incoming and Outgoing phone call in Android 【发布时间】:2019-12-13 23:08:14 【问题描述】:

我正在使用 Broadcastreceiver 来检测电话,它工作正常。 当电话开始时,我使用以下代码开始记录电话并创建一个“CALLLOG”文件夹,其中将存储每个通话记录。

public void startRecordingStoreFile()

String out = new SimpleDateFormat("dd-MM-yyyy_hh-mm-ss").format(new Date());
        File sampleDir = new File(Environment.getExternalStorageDirectory(), "/CALLLOG");
        if (!sampleDir.exists()) 
            sampleDir.mkdirs();
        
        String file_name = "Rec_"+out;
        try 
            audiofile = File.createTempFile(file_name, ".amr", sampleDir);
         catch (IOException e) 
            e.printStackTrace();
        

    recorder = new MediaRecorder();
    recorder.setAudiosource(MediaRecorder.AudioSource.MIC);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder.setOutputFile(audiofile.getAbsolutePath());

 try 
            recorder.prepare();
         catch (IllegalStateException e) 
            e.printStackTrace();
         catch (IOException e) 
            e.printStackTrace();
        
        recorder.start();
        recordstarted = true;
 

下面是停止记录的代码

public void stopRecording()
        if (recordstarted) 
            recorder.stop();
            audioManager.setMode(AudioManager.MODE_NORMAL);
            recordstarted = false;
        
    

音频文件的扩展名为“.amr”。

上面的代码没有录制电话的音频,它正在创建一个“CALLLOG”文件夹,并且存储了“.amr”文件,但没有录制音频。我从 2 天开始就在做这个。

For example suppose lets say I am calling to "X" person, 
1.MIC is not recording once the "X"(other) person lift the call, until then audio is recording some times, 
2.Some times MIC instance is not available as mentioned below solution by Afsar,
I have tried with below code but it doesn't work(Sometimes it works, sometimes not).

我无法录制来电和去电的音频。有时它可以工作,有时它不工作。 请帮助我。 提前致谢。

【问题讨论】:

【参考方案1】:

我在过去尝试在视频通话期间录制音频 + 视频时遇到了同样的问题。当设备处于通话状态时,其他进程正在使用 MIC,因此在将 MediaRecorder AudioSource 设置为 MIC 之前,只需检查 MIC 实例是否可用。你可以这样测试它

private boolean validateMicAvailability()

    Boolean available = true;
    AudioRecord recorder =
            new AudioRecord(MediaRecorder.AudioSource.MIC, 44100,
                    AudioFormat.CHANNEL_IN_MONO,
                    AudioFormat.ENCODING_DEFAULT, 44100);
    try
        if(recorder.getRecordingState() != AudioRecord.RECORDSTATE_STOPPED )
            available = false;

        

        recorder.startRecording();
        if(recorder.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING)
            recorder.stop();
            available = false;

        
        recorder.stop();
     finally
        recorder.release();
        recorder = null;
    

    return available;

这个问题的简单解决方法是使用一些 CallRecorder Library 下面是链接。 aykuttasil/CallRecorder 检查它。

【讨论】:

感谢您的回复 Afsar。我会检查并通知您 嗨,Afsar,我已经尝试过使用上面的代码,但不幸的是它不起作用,它的行为与以前一样,但没有记录每个通话记录。你能帮我处理一下这个通话录音吗? 嗨,Afsar,我也在尝试使用您提到的库。但是我正在使用带有 Java 的 android,当我添加上面的库时,我得到“多个库的包名称为 androidx.vectordrawable”异常。

以上是关于无法在 Android 中录制来电和去电的音频的主要内容,如果未能解决你的问题,请参考以下文章

在 android API29+ 中检测来电和去电

Android 记录来电和去电

如何注销来电和去电接收者?

无论如何要为Android中的来电和去电制作我的自定义用户界面吗?

我可以在后台观察来电和去电吗?

在android中记录通信呼出和呼入