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