Подтвердить что ты не робот

Проблемы с выпуском встроенного микрофона для Android

У меня очень интересная проблема.

У меня создалось впечатление, что когда мое приложение использует микрофон, а системный процесс Android (например, входящий или исходящий) нуждается в микрофоне, мое приложение выпускает его без каких-либо соображений.

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

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

4b9b3361

Ответ 1

В настоящее время нет способа проверить, запрашивает ли другое приложение микрофон. Однако есть некоторые обходные пути:

  • Если вы записываете звук в Activity, просто отпустите микрофон в onPause(), чтобы его можно было использовать приложением переднего плана. Это не будет работать, если вы записываете звук в фоновом режиме.
  • Приостановка записи при поступлении входящего вызова. Чтобы обнаружить входящие (и исходящие) вызовы, посмотрите этот отличный ответ. Когда вызов завершается, возобновите запись.
  • Грязный взлом: если обнаружить входящие вызовы недостаточно, вы можете просмотреть все запущенные приложения и посмотреть, есть ли у них разрешение на микрофон. Как только приложение с разрешением микрофона будет запущено, приостановите запись. Получение всех запущенных приложений может быть затруднено. Для получения дополнительной информации посмотрите здесь, здесь, здесь и здесь для проверки разрешений.

Ответ 2

Насколько я знаю, нет способа узнать состояние микрофона: занято, доступно или , если кто-то запрашивает, потому что это как-то это ответственность система для управления процессами и ресурсами, поэтому помня об этом, вы не можете держать микрофон навсегда, и поэтому вы не можете управлять им, значит, вы не можете управлять и обнаруживать запрос на ресурсы. Если есть информация, которая может помочь вы.

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

Ответ 3

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