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