AudioRecord: start () status -38

У меня есть следующая проблема: я использую SpeechRecognizer для определения нескольких слов. Я использую

public void onResults 

Метод для уничтожения SpeechRecognizer.

Сразу после разрушения я инициализирую AudioRecord и начинаю запись с микрофона. Это приводит к следующей ошибке в моем logcat:

 12-09 00:44:01.976: E/AudioRecord(21185): start() status -38 

Никакое исключение не выбрасывается в моем коде. AudioRecord просто не запускается должным образом. Я предполагаю, что SpeechRecognizer не освобождает микрофон достаточно быстро, потому что, если я добавлю Thread.sleep (200) перед инициализацией AudioRecord, я не испытываю этой проблемы.

По очевидным причинам это решение очень плохое. Таким образом, у меня есть следующий вопрос:

Как проверить правильность инициализации AudioRecord? (Я не получаю исключения в своем коде.)

 _audioRecord.getState() == AudioRecord.STATE_UNINITIALIZED 

Также является ложным.

Или как я могу проверить, правильно ли SpeechRecognizer выпустил микрофон?

Большое спасибо!

Вы должны убедиться, что вы выдаете audioRecord.stop(); И audioRecord.release(); В ваших onPause() или аналогичных методах. Если вы этого не сделаете, при следующем запуске приложения вы не получите доступ к устройству, и вы получите start() status -38

У меня возникла аналогичная проблема с этим статусом ошибки start () AudioRecord -38, что я в конце концов сделал, это цикл над возможными конфигурациями аудиозаписывающего устройства, как сказал ответчик в этом вопросе. Объект AudioRecord не инициализирован. Мне нравится этот метод, поскольку он не Вопрос, какое устройство вы запускаете на нем, в конечном итоге найдет конфигурацию, которая ему нравится.