如何停止占用麦克风

时间:2018-06-08 02:31:00

标签: java android android-broadcast pocketsphinx

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

我有一个Android应用程序,有一些非常酷的麦克风功能,类似于亚马逊Alexa,在后台服务中始终保持不变。问题是,我的应用程序占用了用户'麦克风,使其无法使用:

enter image description here

然而,这对我来说是一种糟糕的应用行为,我想尽力避免它。 当其他应用程序请求使用麦克风时,是否可以通知我,以便我可以自动停止我的服务?

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

3 个答案:

答案 0 :(得分:0)

没有标准的方法来通知另一个应用程序您想要访问麦克风(以便他们释放资源并让您访问它)。但是,您可以向所有其他应用程序发送广播(“请求麦克风”),但是其他应用程序必须实现此功能(很少或零个开发人员可以做到这一点)。

我建议您仅通知用户该麦克风当前不可用,因为您无法执行其他任何操作。

答案 1 :(得分:0)

这很棘手,因为我不知道与此相关的任何API。当然,这将需要系统级API像“ Ok Google”类型的东西一样工作。

(从https://stackoverflow.com/a/43623308/603270起,可行的选择是(从how to detect phone call broadcast receiver in android开始)定期运行作业,并使用android.permission.PACKAGE_USAGE_STATS检查前台应用。

这可能就足够了。但是,您还可以使用android.intent.action.PHONE_STATE或媒体播放(通过Receiver甚至直接通过MediaPlayer来添加有关电话(default logging location for IIS)的信息。

答案 2 :(得分:0)

如果您真的想使此功能正常运行,另一种方法是获取系统上所有已安装应用程序的阵列列表,以及哪些应用程序需要使用麦克风的权限,然后使用可访问性服务进行监视在用户屏幕上,如果用户刚刚打开的应用程序需要麦克风(您将从刚抓取的阵列中知道)。从那里,如果他们的应用需要麦克风,请在您的应用中禁用麦克风。然后,后台服务可以每隔两分钟检查一次,以查看是否需要打开麦克风的应用仍处于打开状态。这确实是低效的。但是,如果您不在乎,那么这可能是个不错的选择。