startRecording() вызывается на неинициализированной AudioRecord?

У меня есть ниже код, который дает сбой инициализации:

recorder = new AudioRecord(AudioSource.MIC, mSamplingRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, iN);
        recorder.startRecording();

Это называется моей деятельностью:

            new AsyncTask<Void, Void, Void>(){
            @Override
            protected Void doInBackground(Void... none) {
                record();
                return null;
            }
        }.execute();

Это дает ниже исключение:

E / AudioRecord: AudioFlinger не удалось создать дорожку записи, состояние: -1 E/AudioRecord-JNI: Ошибка создания экземпляра AudioRecord: проверка инициализации завершилась неудачно с состоянием -1. E/android.media.AudioRecord: код ошибки -20 при инициализации собственного объекта AudioRecord. E/AudioRecord: AudioFlinger не удалось создать дорожку записи, состояние: -1 E/AudioRecord-JNI: Ошибка создания экземпляра AudioRecord: проверка инициализации завершилась неудачно с состоянием -1. E/android.media.AudioRecord: код ошибки -20 при инициализации собственного объекта AudioRecord.

Что могло пойти не так, пожалуйста? Я полагаю, что проблема не в аудио-рекордере, а в асинхронной задаче / многопоточности. Потому что он работает как шарм раньше, когда у меня был фрагмент, включающий onCreateView, и я поместил вызов AsyncTask в onClick кнопки. Теперь я инициализирую пользовательский интерфейс в OnCreate() своей деятельности, у меня нет фрагмента или onCreateView, я думал, что я уже использую асинхронный поток, но все же...

1 ответ

Решено - удаление apk из Android Studio после изменения разрешений в манифесте фактически не меняет разрешение в настройках приложения. Я должен вручную открыть Настройки - >> Приложение -> Разрешения -> слайд "Микрофон, чтобы быть включен.

Другие вопросы по тегам