startRecording()调用未初始化的AudioRecord

时间:2018-04-04 14:29:50

标签: 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:startRecording()调用了一个   未初始化的AudioRecord

但是当我将音频源设置为“MIC”时,它工作正常,但当然不会录制语音电话。

我曾尝试使用MediaRecord类的android但面临同样的问题,即“MIC”工作正常但缺少“VOICE_CALL”。我也在多个论坛上尝试了很多可用的解决方案,但仍然没有运气。

下面我分享了一小段代码。任何有关这方面的帮助将非常感激。感谢

    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();

1 个答案:

答案 0 :(得分:1)

您需要明确要求:

if (ContextCompat.checkSelfPermission(thisActivity, 
    Manifest.permission.RECORD_AUDIO)
        != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(thisActivity,
            new String[]{Manifest.permission.RECORD_AUDIO},
            1234);
}

在Lollipop之后的所有设备上,所以API lvl 23 +

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
            // 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;
        }
    }
}

然后覆盖:

for row in df_twitter['dollar_sign']:
    print list(set(row))