В моем приложении есть служба аудиозаписи, которая будет непрерывно записывать звук. Таким образом, он всегда будет занимать AudioRecord. Это означает, что никакое другое приложение не может использовать диктофон, так как он уже занят службой. Есть ли способ уведомить, что другое приложение запрашивает аудиомагнитофон (чтобы я мог его выпустить), а также когда приложение выпускает его (чтобы я мог вернуть его службе)?
Отпустите AudioRecord android, когда другое приложение запросит запись
Ответы (3)
Возможно, возможный способ — создать BroadcastReceiver
, который получает событие от приложения, которое запрашивает контроль над источником микрофона. Метод onReceive()
должен взаимодействовать со службой и освобождать ресурс. Когда другое приложение завершает работу, оно может отменить процесс, чтобы снова запустить службу. Если вы не можете контролировать поведение запрашивающего приложения, я думаю, что проблема немного в другом. Так или иначе:
Проблема заключается в том, чтобы узнать, когда запрашивается ресурс, это можно сделать с помощью AudioManager. типы намерений. Не забудьте проверить Управление фокусом звука, в котором говорится о потере фокуса звука. ПЕРЕХОДНЫМ способом!
Как упоминал @Rekire, возможно, нет никакого способа добиться этого. Кроме того, AudioManager не предоставляет таких трансляций, поэтому это невозможно для разных приложений. Возможно, рутирование устройства — единственный вариант.
Это можно сделать с помощью обратного вызова AudioManager.OnAudioFocusChangeListener. Просто остановите запись по событию AUDIOFOCUS_LOSS_TRANSIENT и снова начните по событию AUDIOFOCUS_GAIN. Это решение хорошо работает для голосового поиска Google (виджет поиска Google, Google Chrome и т. д.).
Но, к сожалению, он плохо работает с другими обычными приложениями (например, приложение Диктофон HTC M7 не может начать запись при первом нажатии на кнопку «Запись», второе нажатие делает свое дело — кажется, приложение должно быть готово повторить попытку записи в случае сбоя несколько раз). раз).