【发布时间】:2021-02-05 09:13:07
【问题描述】:
在向三星推出最新的 Android 11 后,音频管理器一直在苦苦挣扎。它已经运行了好几年,包括所有可能的 Android 10 及更低版本的设备。
以下是我们获取音频管理器的方法:
val audioManager = activity?.getSystemService(Context.AUDIO_SERVICE) as? AudioManager
以前是这样的:
audioManager?.let {
it.isSpeakerphoneOn = it.isSpeakerphoneOn.not()
}
单击“扬声器”按钮后,我们将扬声器的值更改为相反,并且扬声器完美地打开/关闭。这停止在 Android 11 上运行(特别是我们正在使用 OneUI 3.0 在三星 s10e 上进行测试)
我们还尝试在打开/关闭扬声器之前将模式更改为音频管理器,但没有成功。现在我们这样做:
private fun enableSpeaker() {
val audioManager = activity?.getSystemService(Context.AUDIO_SERVICE) as? AudioManager
if (audioManager != null) {
if (!audioManager.isSpeakerphoneOn) {
audioManager.isSpeakerphoneOn = true
audioManager.mode = AudioManager.MODE_IN_COMMUNICATION
}
}
}
private fun disableSpeaker() {
val audioManager = activity?.getSystemService(Context.AUDIO_SERVICE) as? AudioManager
if (audioManager != null) {
if (audioManager.isSpeakerphoneOn) {
audioManager.isSpeakerphoneOn = false
audioManager.mode = AudioManager.MODE_NORMAL
}
}
}
在这种情况下,它开始在我们的应用程序内部工作,而呼叫由 VoIP 提供商(例如 Zoiper)处理,但不是三星在 Android 11 上的本机通话应用程序。
特别是已经在两台搭载 Android 11 (OneUI 3.0) 的三星 Galaxy s10e 上进行了测试。
非常感谢任何帮助。
【问题讨论】:
-
这里的 VoIP 开发人员也会对此进行调查并让您了解最新情况。还没有任何抱怨。您使用什么 VoIP 库?还是只尝试过Zoiper?什么版本?
-
这不是 voip 解决方案。通过本机拨号程序或一些无效的解决方案同时进行呼叫(例如 Zoiper,我们大量使用它进行测试,但它不是我们解决方案的一部分)
-
看起来很奇怪,根据官方文档,.isSpeakerphoneOn 仍然被支持并且不被弃用了。
-
可能与三星拨号器本身在 OneUI 3.0 中捕获音频管理器有关,但不确定。还没有设法弄清楚。因为它适用于其他 VoIP 拨号器
-
如果耳机(通过蓝牙)连接到设备,我们会遇到 isSpeakerphoneOn 在 Android 11 上无法正常工作
标签: android android-audiomanager