Как прекратить забивать микрофон

TL; DR: Мое приложение забивает пользовательский микрофон. Могу ли я отключить его автоматически, когда другое приложение должно использовать микрофон?

У меня есть приложение для Android, в котором есть действительно классные функции микрофона, похожие на Amazon Alexa, которые все время остаются в фоновом режиме. Проблема в том, что мое приложение запускает микрофон пользователей, что делает его непригодным:

enter image description here

Однако это ужасное поведение приложения от моего имени, и я хочу сделать все возможное, чтобы этого избежать. Можно ли получать уведомление, когда другое приложение запрашивает использование микрофона, чтобы я мог автоматически остановить мой сервис?

PS: Я использую библиотеку Pocketsphinx для непрерывного распознавания голоса в фоновом режиме.

Ответ 1

Нет стандартного способа информировать другое приложение о том, что вы хотите получить доступ к микрофону (чтобы они освобождали ресурсы и позволяли вам получить к нему доступ). Тем не менее, вы можете отправлять трансляцию всем другим приложениям ("запрашивать микрофон"), но другим приложениям придется реализовать эту функцию (и очень немногие или нулевые разработчики сделают это).

Я бы рекомендовал вам просто сообщить пользователю, что микрофон в настоящее время недоступен, потому что вы ничего не можете сделать.

Ответ 2

Это сложно, поскольку я не являюсь продуктом любого API для этого. Это, безусловно, потребует, чтобы API-интерфейсы на уровне системы работали как тип "О'кей, Google".

Жизнеспособным вариантом будет (от fooobar.com/questions/6361252/...), чтобы выполнять задание через регулярные промежутки времени, проверяя приложения переднего плана с помощью android.permission.PACKAGE_USAGE_STATS.

Этого может быть достаточно. Но вы также можете добавить информацию о телефонных звонках (как определить приемник телефонных звонков в Android) с помощью android.intent.action.PHONE_STATE или воспроизведения мультимедиа (через Receiver или, возможно, даже MediaPlayer напрямую).

Ответ 3

Если вы действительно хотите, чтобы эта штука работала, альтернативой может быть получение списка массивов всех установленных в системе приложений, которым требуется разрешение на использование микрофона или нет, а затем используйте службу специальных возможностей для мониторинга экрана пользователей. если приложение, которое только что открыл пользователь, требует микрофон (который вы узнаете по массиву, который вы только что захватили). Оттуда отключите микрофон в вашем приложении, если их приложение нуждается в микрофоне. Затем фоновая служба может проверять интервалы, скажем, две минуты, чтобы увидеть, открыто ли приложение, для которого требуется микрофон. Это действительно неэффективно. Но если вам все равно, то это может быть хорошим вариантом.