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

Вопрос: Хотя фрагмент кода основан на exaple из 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.

Ответы

Ответ 1

Добавить разрешение record_audio в AndroidManifest.xml

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

Ответ 2

В последних версиях Android кажется, что перенастройка apk из Android Studio после изменения разрешений в манифесте фактически не изменяет разрешения в настройках приложения. Вот почему приведенный выше ответ сработал у меня. Я создал приложение без разрешения RECORD_AUDIO в своем манифесте и увидел ошибку разрешения в моем журнале (вместе с ошибками в OP). Я добавил разрешение на мой манифест и перезапустил приложение на устройстве, ошибка разрешения в журнале больше не была, но я все еще получил ошибки в OP. Я пошел в свою систему, приложения, диспетчер приложений → MyApp → Permissions и увидел, что Record Audio был включен, но все еще выключен. Вручную поверните это, зафиксировав его.

Я предполагаю (но не подтвердил), что, если бы я ввел правильное разрешение в мой манифест в первую очередь, это бы просто сработало для меня. Кроме того, удаление моего приложения с устройства, а затем переустановка, также может исправить, но я тоже не пробовал это.

Ответ 3

Решение для андроидов для предварительного зелья будет таким же, как упоминалось в Olexij...

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

Однако, начиная с Android API 23 (Marshmallow), это считается и опасным разрешением, и вы должны запрашивать это разрешение в пределах действия, в котором он используется. Результатом этого является Дэйв. если вы объявите разрешение в манифесте, но не запрашиваете его во время выполнения (по крайней мере в первый раз), оно будет отображаться в разрешениях приложений в диспетчере приложений, но будет оставаться выключенным.

Проверка...

Ответ 4

Решение для API 23 (Marshmallow) прост. Вы должны установить "targetSdkVersion 22" в файле bulid.gradle после получения разрешения ниже.