【问题标题】:isSpeakerphoneOn stopped working on Android 11 devicesisSpeakerphoneOn 停止在 Android 11 设备上运行
【发布时间】: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


【解决方案1】:

设置模式之前设置isSpeakerphoneOn

private fun enableSpeaker() {
    val audioManager = activity?.getSystemService(Context.AUDIO_SERVICE) as? AudioManager
    if (audioManager != null) {
        if (!audioManager.isSpeakerphoneOn) {
            audioManager.mode = AudioManager.MODE_IN_COMMUNICATION
            audioManager.isSpeakerphoneOn = true
        }
    }
}
private fun disableSpeaker() {
    val audioManager = activity?.getSystemService(Context.AUDIO_SERVICE) as? AudioManager
    if (audioManager != null) {
        if (audioManager.isSpeakerphoneOn) {
            audioManager.mode = AudioManager.MODE_NORMAL            
            audioManager.isSpeakerphoneOn = false

        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    相关资源
    最近更新 更多