Intereting Posts
Добавьте два раздела в андроид recyclerview Как играть или возобновлять музыку другого музыкального проигрывателя из моего кода? Проблема с Google Диском Android API Относительно расположенные элементы в прокручиваемом абсолютно позиционированном div «отстают» от прокрутки Что означает синтаксис «final String … args» / do? Попробуйте получить ответ USSD в android Как я могу вращать libstreaming Video Preview? Конфигурации Android для нескольких клиентов Возможно ли перехватить речевые данные во время разговора? Несовместимые плагины для android-apt после обновления до Android Studio 2.3 .java не использует конструкторы View 2 или 3 аргумента; Атрибуты XML не будут работать Android с помощью viewPager vs с помощью tabhost Лямбда-выражения разбиваются с помощью IncompatibleClassChangeError в Android при использовании разъема Сохранять состояние фрагмента между действиями Добавление массива кнопок в GridView в приложении для Android

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

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

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

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

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

Solutions Collecting From Web of "Проблемы с выпуском внутреннего микрофона Android"

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

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

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

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

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