Java 对未初始化的音频记录调用startRecording()

Java 对未初始化的音频记录调用startRecording(),java,android,android-mediarecorder,audiorecord,call-recording,Java,Android,Android Mediarecorder,Audiorecord,Call Recording,我正在尝试在android上录制语音通话。我正在使用android的AudioRecord类/api来执行此操作。但由于某些原因,AudioRecord无法在某些设备上录制语音通话(尤其是最新的OS 6.0、7.0)。每当我将AudioRecord对象的AudioSource参数设置为“VOICE_CALL”(即MediaRecorder.AudioSource.VOICE_CALL)时,它都会给出此异常 java.lang.IllegalStateException:在 未初始化录音 但当我将

我正在尝试在android上录制语音通话。我正在使用android的AudioRecord类/api来执行此操作。但由于某些原因,AudioRecord无法在某些设备上录制语音通话(尤其是最新的OS 6.0、7.0)。每当我将AudioRecord对象的AudioSource参数设置为“VOICE_CALL”(即MediaRecorder.AudioSource.VOICE_CALL)时,它都会给出此异常

java.lang.IllegalStateException:在 未初始化录音

但当我将音频源设置为“麦克风”时,它工作正常,但当然不会录制语音通话

我曾尝试使用android的MediaRecord类,但也遇到了同样的问题,即“话筒”的效果很好,但“语音通话”的效果不佳。我也在多个论坛上尝试了许多可用的解决方案,但仍然没有成功

下面我分享了我的一小段代码。在此方面的任何帮助都将不胜感激。谢谢

    recorder = new AudioRecord(MediaRecorder.AudioSource.VOICE_CALL,
            44100, AudioFormat.CHANNEL_IN_MONO,
            AudioFormat.ENCODING_PCM_16BIT, AudioRecord.getMinBufferSize(44100,AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT));
    recorder.startRecording();

您需要明确要求:

<uses-permission android:name="android.permission.RECORD_AUDIO"/>
然后覆盖:

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case 1234: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                initializePlayerAndStartRecording();

            } else {
                Log.d("TAG", "permission denied by user");
            }
            return;
        }
    }
}

感谢您的关注,我已经处理了此权限,因此不存在“录制音频”权限的问题
@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case 1234: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                initializePlayerAndStartRecording();

            } else {
                Log.d("TAG", "permission denied by user");
            }
            return;
        }
    }
}