gpt4 book ai didi

java - startRecording() 在未初始化的 AudioRecord 上调用

转载 作者:行者123 更新时间:2023-11-30 00:02:33 25 4
gpt4 key购买 nike

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

java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord

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

我曾尝试使用 Android 的 MediaRecord 类,但遇到了同样的问题,即适用于“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();

最佳答案

您需要明确要求:

<uses-permission android:name="android.permission.RECORD_AUDIO"/>

在 Lollipop 之后的所有设备上,因此 API 等级 23+

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

然后覆盖:

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

关于java - startRecording() 在未初始化的 AudioRecord 上调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49653692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com