Медиа-рекордер Для записи вызовов некогда не удалось записать другой боковой голос

В моем приложении есть функция записи голосовых вызовов, и она работает отлично. Но при тестировании (Samsung s7, s8) он не работает. Приложение способно записывать только голоса абонентов, а не голос с другого конца. Ниже мой код для проверки, пожалуйста, предложите решение

MediaRecd = new MediaRecorder();
            MediaRecd.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL
            );

            MediaRecd.setAudioChannels(ConstantVariables.audioChannels);//monoRecording

   MediaRecd.setAudioEncodingBitRate(64);
            MediaRecd.setAudioSamplingRate(44100);


            MediaRecd.setOutputFormat(output_formats[pos]);//.mp3
            MediaRecd.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//I already try with all possible CAMCORDER , MIC , Default etc etc but none was working
            MediaRecd.setOutputFile(Currentfilename);

            try {
                MediaRecd.prepare();
                MediaRecd.start();


            } catch (Exception e) {
                MediaRecd.reset();
                MediaRecd.release();
                MediaRecd = null;

            }

Ответ 1

AudioSource.VOICE_CALL не работает в некоторых устройствах Android, поэтому вместо VOICE_CALL используйте ниже

Сначала попробуйте MediaRecorder.AudioSource.CAMCORDER

 MediaRecd = new MediaRecorder();
        MediaRecd.setAudioSource(MediaRecorder.AudioSource.CAMCORDER
        );

Если выше не работает, чем использовать MediaRecorder.AudioSource.MIC

MediaRecd = new MediaRecorder();
        MediaRecd.setAudioSource(MediaRecorder.AudioSource.MIC
        );

Ответ 2

Попробуйте этот код. Мне также нужна эта функция, и следующий код работает для меня отлично:

    try {

        MediaRecorder recorder = new MediaRecorder();

        recorder.reset();

        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

        recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);

        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);


        String date = today.monthDay + "_" + (today.month + 1) + "_"

                + today.year;


        String time = today.format("%k_%M_%S");

        File file = createDirIfNotExists(date + "_" + time);

        recorder.setOutputFile(file.getAbsolutePath());

        recorder.prepare();

        recorder.start();

        recordStarted = true;

        status = true;


    } catch (Exception ex) {
        ex.printStackTrace();
    }


public File createDirIfNotExists(String path) {
    selected_song_name = path;
    File folder = new File(Environment.getExternalStorageDirectory()
            + "/PhoneCallRecording");

    if (!folder.exists()) {
        if (!folder.mkdirs()) {
            Log.e("TravellerLog :: ", "folder is created");
        }
    }

    File file = new File(folder, path + ".3GPP");

    try {
        if (!file.exists()) {
            if (file.createNewFile()) {
                Log.e("TravellerLog :: ", "file is created");
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return file;

}