Unable to record audio of Incoming and Outgoing phone call in Android

血红的双手。 提交于 2019-12-02 16:16:32

问题


Unable to record audio of Incoming and Outgoing phone call in Android

I am using Broadcastreceiver for detecting Phonecalls, It is working fine. When ever phonecall is started I am using below code for start recording Phonecall and creating a folder of "CALLLOG", in which each call record will be stored.

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;
} 

Below code for stopping the record

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

The extension of audio files are ".amr".

Above code is not recording the audio of a phonecall, it is creating a folder of "CALLLOG" and ".amr" files are stored but audio is not recording.I was working on this from 2 days.

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).

I am unable to record audio of Incoming and outgoing calls.Some times it works, sometimes it is not working. Please help me on this. Thanks in Advance.


回答1:


I had the same issue in the past I was trying to record Audio + Video during video call. While device is in call MIC is being used by other processes, so before setting MediaRecorder AudioSource as MIC just check whether MIC instance is available or not. You can test it like that

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;
}

Simple solution of this problem is to use some CallRecorder Library following is the link. aykuttasil/CallRecorder check it.



来源:https://stackoverflow.com/questions/57375311/unable-to-record-audio-of-incoming-and-outgoing-phone-call-in-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!