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]
Другие вопросы по тегам