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