public class AudioRecorderActivity extends Activity {
private static final int RECORDER_SAMPLERATE = 8000;
private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO;
private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
private AudioRecord recorder = null;
private static final String TAG = "AudioRecorderActivity";
short[][] buffers = new short[256][160];
int ix = 0;
private boolean stopped = false;
private void startRecording() {
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
try {
int N = AudioRecord.getMinBufferSize (
RECORDER_SAMPLERATE,
RECORDER_CHANNELS,
RECORDER_AUDIO_ENCODING) * 20;
recorder = new AudioRecord(AudioSource.MIC,
RECORDER_SAMPLERATE,
RECORDER_CHANNELS,
RECORDER_AUDIO_ENCODING,N );
recorder.startRecording();
while(!stopped) {
short[] buffer = buffers[ix++ % buffers.length];
N = recorder.read(buffer,0,buffer.length);
}
}
catch(Throwable x) {
Log.v(TAG,"Error reading voice audio",x);
x.printStackTrace();
}
finally {
stopped = true;
stopRecording();
}
}
}问:虽然代码片段是基于StackOverflow中的一个示例,但它不工作。请让我知道可能的错误是什么?
以下是错误消息
12-20 03:44:32.271: E/AudioRecord(224): AudioFlinger could not create record track, status: -1
12-20 03:44:32.271: E/AudioRecord-JNI(224): Error creating AudioRecord instance: initialization check failed.
12-20 03:44:32.271: E/AudioRecord-Java(224): [ android.media.AudioRecord ] Error code -20 when initializing native AudioRecord object.发布于 2014-01-15 16:22:47
向AndroidManifest.xml添加record_audio权限
<uses-permission android:name="android.permission.RECORD_AUDIO" />发布于 2016-05-21 07:06:16
在最新的Android版本中,似乎在更改清单中的权限后从Android Studio重新推送apk实际上并不会更改应用程序设置中的权限。这就是为什么上面的答案对我有效。我在清单中构建了一个没有RECORD_AUDIO权限的应用程序,并在日志中看到了权限错误(以及OP中的错误)。我将权限添加到我的清单中,并在设备上重新运行应用程序,日志中的权限错误不再存在,但我在操作中仍然收到错误。我转到我的系统、应用程序、应用程序管理器和MyApp ->权限,看到已列出录制音频,但仍处于关闭状态。手动打开它修复了它。
我想(但还没有确认),如果我一开始就在我的清单中建立了正确的权限,这对我来说应该是有效的。或者,从设备上卸载我的应用程序,然后重新安装,也可能会解决问题,但我也没有尝试过。
发布于 2016-07-20 07:33:35
android的预棉花糖版本的解决方案将与Olexij提到的相同...
<uses-permission android:name="android.permission.RECORD_AUDIO" />然而,由于启动Android API23(棉花糖),这被认为是危险的权限,您必须在使用它的Activity中请求此权限。Dave的经验就是这样;如果你在Manifest中声明权限,但在运行时(至少第一次)不请求,那么它将显示在应用程序管理器的App权限中,但将保持关闭状态。
检查一下...
https://stackoverflow.com/questions/20693001
复制相似问题