AudioFlinger не может создать запись дорожки, статус: -1, нужна помощь для ifx
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();
}
}
}
Вопрос: хотя фрагмент кода основан на примере из Stackru, он не работает. Пожалуйста, дайте мне знать, в чем может быть ошибка?
Вот сообщение об ошибке
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.
5 ответов
Добавить разрешение record_audio в AndroidManifest.xml
<uses-permission android:name="android.permission.RECORD_AUDIO" />
В последних версиях Android кажется, что удаление apk из Android Studio после изменения разрешений в манифесте фактически не меняет разрешение в настройках приложения. Вот почему вышеупомянутый ответ работал для меня. Я создал приложение без разрешения RECORD_AUDIO в моем манифесте и увидел ошибку разрешения в моем журнале (наряду с ошибками в OP). Я добавил разрешение в свой манифест и перезапустил приложение на устройстве, ошибки разрешения в журнале больше не было, но я все еще получил ошибки в OP. Я зашел в "Система", "Приложения", "Диспетчер приложений" -> "MyApp" -> "Разрешения" и увидел, что Record Audio была в списке, но все еще выключена. Вручную включив это исправил.
Я представляю (но не подтвердил), что если бы я вначале ввел правильное разрешение в свой манифест, это бы сработало для меня. Кроме того, удаление моего приложения с устройства, а затем переустановка может также исправить, но я тоже не пробовал.
Решение для андроидных версий до зефира будет таким же, как упоминал Алексей...
<uses-permission android:name="android.permission.RECORD_AUDIO" />
Однако, начиная с Android API 23 (Marshmallow), это считается опасным разрешением, и вы должны запросить это разрешение в Деятельности, где оно используется. Опыт Дэйва является результатом этого; если вы объявляете разрешение в Manifest, но не запрашиваете его во время выполнения (по крайней мере, в первый раз), оно будет отображаться в разрешениях приложения в Application Manager, но останется выключенным.
Проверьте...
Решение для API 23 (Зефир) простое. Вы должны установить "targetSdkVersion 22" в файле bulid.gradle после получения разрешения ниже.
Предоставление явного разрешения исправило проблему для меня.
Попробуйте эти шаги
Android Version 7.0
Settings -> Applications -> <MyAPP> -> Permissions
-> [Turn Camera and Microphone ON]