Android内置麦克风发布问题

我有一个非常有趣的问题。

我的印象是,当我的应用程序使用麦克风时,Android系统进程(如传入或传出呼叫)需要麦克风,我的应用程序无需任何考虑即可释放它。

但我想这不再是问题,因为我收到的抱怨很少,当使用该应用程序并且有来电时,通话中的另一方听不到。

是否有任何方法可以确保每当系统进程请求麦克风发布时?

目前, 无法检查其他应用是否请求麦克风 。 但是,有一些解决方法:

  • 如果您在活动中录制声音,只需在onPause()释放麦克风,以便前台应用可以使用它。 如果您在后台服务中录制音频,则无效。
  • 有来电时暂停录音。 要检测传入(和传出)呼叫,请查看此优秀答案 。 通话结束后,恢复录制。
  • 肮脏的黑客:如果检测到来电不够,您可以遍历所有正在运行的应用,看看他们是否拥有麦克风权限。 只要具有麦克风权限的应用程序正在运行,请暂停录制。 获取所有运行的应用程序可能很困难 有关更多信息,请查看此处 , 此处 , 此处和此处以查看权限 。

据我所知, 没有办法知道麦克风的状态是忙碌,可用还是有人要求它,因为不管怎样这些都是系统管理流程和资源的责任所以要记住这一点,你不能保持麦克风永远存在,所以你无法控制它意味着你无法管理和检测资源上的请求。以下是一些可能对你有帮助的信息。

您可以尝试的是,克服所有可能性,当系统可以使用麦克风设置广播接收器进行呼叫广播时,当他们触发释放麦克风时,当呼叫完成后,您可以再次获取它。

在我的情况下,我创建了后台线程,检查来自麦克风的传入位。 如果它们为零(或数秒滞后),应用程序会中断该过程。 然而,当然,这不是一个“好”的解决方案,但可能会有所帮助。