android - 检索具有音频焦点更改的应用程序名称

标签 android android-audiomanager

我似乎找不到任何与找出哪个应用程序获得音频焦点相关的信息。我可以从我的应用程序中正确地确定它是什么类型的焦点变化,但不能从任何其他应用程序中确定。有什么方法可以确定哪个应用程序获得了焦点?

"What am I wanting to do?"

我已经设法录制了内部声音,无论是音乐还是语音。如果我当前正在录制无论来源如何的音频,我想确定哪个应用程序接管了焦点,以确定我的应用程序下一步需要做什么。

目前我正在使用 AudioManager.OnAudioFocusChangeListener让我的应用程序在焦点改变后停止录制内部声音,但我想要获得焦点的应用程序名称。

最佳答案

简答:没有好的解决方案……Android 可能就是这么打算的。

解释: 查看源代码,AudioManager 没有用于检查谁拥有音频焦点的 API(甚至是隐藏的 API)。 AudioManager 包装对 AudioService 的调用,它保存真实的音频状态。当 AudioManager 绑定(bind)到它时,AudioService 通过它的 stub 公开的 API 也没有用于查询当前音频焦点的 API。因此,即使通过反射/系统级权限,您也无法获得所需的信息。

如果您对如何跟踪焦点变化感到好奇,可以查看MediaFocusControl。其实例是AudioService的成员变量here .

未经测试的 Hacky Heuristic: 您也许可以通过查看 UsageStats 获得一些有用的信息。时间戳。然后,一旦您拥有在失去 AudioFocus 后大约 500 毫秒内使用过的应用程序,您就可以将它们与具有音频权限的应用程序进行交叉检查。可以关注this post获取任何已安装应用的权限。

这显然是一种启发式方法,可能需要进行一些调整。它还要求用户授予您的应用程序权限以访问使用情况统计信息。里程可能会有所不同。

关于android - 检索具有音频焦点更改的应用程序名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31616084/

相关文章:

android - Flutter 谷歌登录为空

android - 无法从其他应用程序访问 customProvider。它说它缺少它已经拥有的权限

android - 通过左右扬声器传递音频

android - 选择通知音

javascript - 我无需 root 即可看到的任何内存文件夹的路径是什么? AndroidStudio

安卓 WebView : how do I control webView height?

java - 我可以暂时暂停 ORMLite 中自动生成的 ID 吗?

Android Media Player 在启动视频时避免音频焦点变化

android - 无法在 OnAudioFocusChangeListener 中处理 "duck"我的音频的通知声音

android - 更改 Android 中的媒体音量?