如何停止占用麦克风

TL;DR:我的应用占用了用户的麦克风。我可以在其他应用需要使用麦克风时自动将其关闭吗?

我有一个Android应用程序,它具有一些非常酷的麦克风功能,类似于Amazon Alexa,可以在后台服务中始终保持打开状态。问题是,我的应用程序占用了用户的麦克风,使其无法使用:

enter image description here

但是,代表我,这是可怕的应用程序行为,我想尽我所能避免它。是否可以在其他应用程序请求使用麦克风时收到通知,以便我可以自动停止我的服务?

PS:我正在使用Pocketsphinx库进行连续的背景语音识别。


答案 1

这很棘手,因为我不是任何API的ware。这肯定需要系统级API像“Ok Google”类型一样工作。

一个可行的选项是(从 https://stackoverflow.com/a/43623308/603270 开始)定期运行作业,使用 检查前台应用。android.permission.PACKAGE_USAGE_STATS

这可能就足够了。但是您也可以添加有关电话(如何在Android中检测电话广播接收器)使用或媒体播放(通过甚至直接)的内容。android.intent.action.PHONE_STATEReceiverMediaPlayer


答案 2

如果你真的想让这个东西工作,另一种方法是获取系统上所有已安装应用程序的数组列表,以及哪些应用程序需要使用麦克风的权限,然后使用辅助功能服务来监视用户屏幕,如果用户刚刚打开的应用程序需要麦克风(你会从你刚刚抓取的数组中知道)。从那里,如果他们的应用程序需要麦克风,请禁用应用程序中的麦克风。然后,后台服务可以每隔两分钟签入一次,以查看需要麦克风的应用是否仍处于打开状态。这真的很低效。但如果你不在乎,那么这可能是一个不错的选择。


推荐