2014-09-05 7 views
10

У меня есть служба записи звука в моем приложении, которая будет записывать звук непрерывно. Таким образом, он всегда будет занимать AudioRecord. Это означает, что никакое другое приложение не может использовать аудиомагнитофон, поскольку он уже занят службой. Есть ли способ сообщить, что другое приложение запрашивает звукозаписывающее устройство (чтобы я мог его выпустить), а также когда приложение выпустит его (чтобы я мог вернуть его службе)?Релиз AudioRecord android, когда другой запрос приложения для записи

+0

Я думаю, что это не общий сенарио, поэтому я думаю, что этого не достичь. – rekire

+0

@rekire Функция вызова устройства автоматически выполняет микрофон, даже если служба работает. Так что, наверное, должен быть какой-то способ. – berserk

+0

Я думаю, что использует более низкие собственные API, которые не доступны ни для каких приложений. – rekire

ответ

1

Возможно, возможным способом является создание BroadcastReceiver, который получает событие от приложения, которое запрашивает управление источником микрофона. Метод onReceive() должен взаимодействовать с сервисом и освобождать ресурс. Когда другое приложение заканчивается, он может вернуть процесс, чтобы снова запустить службу. Если вы не можете получить контроль над поведением запрашивающего приложения, я думаю, что есть немного другая проблема. Во всяком случае:

Проблема в том, чтобы знать, когда запрашивается ресурс, это можно сделать с помощью AudioManager типов намерений. Обязательно проверьте Managing audio focus, в котором говорится о потерях фокусного расстояния в режиме TRANSIENT!

+0

Спасибо за ответ! Я дам ему попробовать :) – berserk

+0

Я читаю класс AudioManager, но нет трансляции для доступности микрофона. Вместо этого есть несколько флагов, которые, как я думаю, не могут быть использованы в моем случае. – berserk

1

Как упоминалось в @Rekire, возможно, нет возможности достичь этого. Кроме того, AudioManager не предоставляет таких трансляций, поэтому это невозможно для разных приложений. Возможно, rooting устройство является единственным вариантом.

+0

Хм .. думаю, у меня нет другого выбора! – berserk

+0

Как работает «Auto-Shazam»? – HaydenKai

0

Это можно сделать с помощью обратного вызова AudioManager.OnAudioFocusChangeListener. Просто прекратите запись в событии AUDIOFOCUS_LOSS_TRANSIENT и снова запустите событие AUDIOFOCUS_GAIN. Это решение хорошо подходит для Google Voice Search (виджета Google Search, Google Chrome и т. Д.).

Но, к сожалению, он плохо работает для других обычных приложений (например, приложение HTC M7 Voice Recorder не может начать запись при первом нажатии кнопки «Запись», второй щелчок делает трюк - кажется, приложение должно быть готово к повторной попытке запись по ошибке несколько раз).

+0

Спасибо, проверим. – berserk