2016-08-15 4 views
19

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

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

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

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

+0

попробуйте http://stackoverflow.com/questions/4194342/how-can-i-record-voice-and-record-call-in-android –

+0

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

+0

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

ответ

5

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

  • Если записывать звук в деятельности, просто освободить микрофон в onPause(), так что на переднем плане приложение может использовать его. Это не будет работать, если вы записываете звук в фоновом режиме.
  • Приостановить запись при поступлении входящего вызова. Чтобы обнаружить входящие (и исходящие) вызовы, просмотрите this excellent answer. Когда вызов закончится, возобновите запись.
  • Грязный взлом: если обнаружить входящие вызовы недостаточно, вы можете пропустить все запущенные приложения и посмотреть, есть ли у них разрешение на микрофон. Как только приложение с разрешением микрофона будет запущено, приостановите запись. Получение всех запущенных приложений может быть затруднено. Для получения дополнительной информации смотрите here, here, here и here for checking the permissions.
+0

Спасибо Manu. Моему приложению нужен микрофон, находясь в фоновом режиме, потому что он пытается распознать аудио даже тогда, конечно, если пользователь этого захочет. Что касается входящих звонков и исходящих, я уже реализовал это решение, и он протестирован, он работает. Что касается грязного взлома, я пытался реализовать что-то подобное, поскольку на данный момент нет другого варианта, только то, что я думал, - это проверить только приложение на переднем плане, если оно имеет разрешение RECORD_AUDIO. Я прекращаю использование микрофон. Но не будет ли это слишком много обрабатывать, если я запустил это на таймере 10-15 секунд? –

+0

@BorceIvanovski Я разработал приложение simliar, которое проверяет все запущенные приложения каждые 2 секунды и не разряжает слишком много батареи. Вы можете оптимизировать его дальше, например, вам не нужно проверять запуск приложений, если экран выключен и так далее ... – Manu

+0

ОК, я не думал об этой части, чтобы ее еще больше оптимизировать. Если это не разряжает батарею каждые 2 секунды, это может быть даже лучшим вариантом. Кто-нибудь знает какой пример, как получить текущее имя пакета приложений переднего плана? Поскольку мне не нужно искать запущенные приложения, мне просто нужно найти, какой из них стоит на переднем плане, так как не имеет значения, работает ли он, он должен появиться на переднем плане, чтобы его можно было использовать. –

0

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

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

+0

Спасибо Pavneet за информацию. Я не пытаюсь добиться, чтобы сохранить микрофон навсегда, на самом деле я хочу достичь oposite. Всякий раз, когда кто-то запрашивает микрофон, отпустите его. Я столкнулся с проблемой на некоторых устройствах Android в Азии, где, когда приложение работает, входящие или исходящие вызовы не получают микрофон, который, как я думал, невозможно, поскольку это системные процессы.И да, я придерживаюсь подхода, но некоторые пользователи могут поддерживать приложение в фоновом режиме в течение более длительного периода времени, который все еще использует микрофон. –

+0

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

0

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

+0

Спасибо Вячеславу, но это не будет полезно для меня с этой проблемой –

Смежные вопросы