Android 内部麦克风释放问题

Android internal microphone release issues

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

我的印象是,当我的应用程序使用麦克风时,Android 系统进程(如来电或去电)需要麦克风,我的应用程序会不加考虑地释放它。

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

有什么方法可以确保每当系统进程请求麦克风时,都将被释放?

据我所知,无法知道麦克风的状态是忙碌、可用还是如果有人请求因为不知何故,这些是系统管理流程和资源的责任,所以请记住这一点,你不能永远保留麦克风,所以你无法控制它意味着你无法管理和检测资源请求。以下是一些可能对您有所帮助的信息。

您可以尝试的是,克服系统可以使用麦克风时的所有可能性,例如为通话广播设置广播接收器,当它们触发时释放麦克风,通话结束后您可以再次获取它。

在我的例子中,我创建了后台线程来检查来自麦克风的传入比特。如果他们将归零(或几秒钟的数据滞后),则应用程序会中断该过程。不过,这当然不是 "good" 解决方案,但可能会有帮助。

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

  • 如果您在 Activity 中录制声音,只需在 onPause() 中松开麦克风,以便前台应用程序可以使用它。如果您在后台服务中录制音频,这将不起作用。
  • 有来电时暂停录音。要检测传入(和传出)呼叫,请查看 this excellent answer。通话结束后,恢复录音。
  • 肮脏的 hack:如果检测来电还不够,您可以遍历所有 运行 应用程序并查看它们是否具有麦克风权限。一旦具有麦克风权限的应用程序 运行,暂停录音。获取所有 运行 个应用程序可能很困难。有关更多信息,请查看 here, here, here and here for checking the permissions.