Я хочу захватить 5 секунд аудио и сохранить его, используя android.media.MediaRecorder
. Один из подходов состоял бы в том, чтобы позвонить start()
и запланировать stop()
для вызова с android.os.Handler
, но я не уверен, что это было бы очень точно.Как я могу безопасно использовать MediaRecorder для записи определенной продолжительности медиа?
MediaRecorder
имеет setMaxDuration
способ, который выглядит надежно. Он будет посылать сообщение в android.media.MediaRecorder.OnInfoListener
раз таймер, но документы говорят:
Останов происходит асинхронно, нет никакой гарантии, что рекордер будет остановлен во время слушатель уведомлена.
Я считаю, что нужно вызвать release()
на MediaRecorder
, когда я сделал, так что мне нужно знать, когда это безопасно сделать так.
Итак:
- максимальная продолжительность не упоминается в state transition diagram. Нужно ли звонить
stop()
? - Я правильно понял, что рекордер сохранит звук и сбросит файл, когда максимальная продолжительность будет достигнута? Промывка/завершение работы файла не упоминается в документах.
- действительно ли нужно позвонить
release()
после того, как я не буду повторно использовать объектMediaRecorder
? - Должен ли я предположить, что небезопасно звонить
release()
как частьOnInfoListener
из-за асинхронности? - если да, то как мне это сделать? Установите еще один таймер?
Большое спасибо! Я попробую. Любые идеи о безопасности выпуска на асинхронный обратный вызов? – Joe
Хотя это асинхронно, я считаю, что до тех пор, пока вы не вызываете 'stop()', прежде чем вы вызовете 'release()', вы должны быть в порядке. – Willis
Но разве не весь вопрос об асинхронном событии, который он называет 'stop()' сам, и я не знаю, случится ли это до обратного вызова? – Joe