gpt4 book ai didi

android - 如何在android 10中以编程方式切换音频输出?

转载 作者:行者123 更新时间:2023-12-03 14:23:11 24 4
gpt4 key购买 nike

我的用例是我有一个应用程序,用户可以在其中按下按钮,它会在外部扬声器和有线耳机/蓝牙设备之间切换。如果用户连接到有线耳机或蓝牙耳机设备,我想将该有线耳机或蓝牙的音频输出切换到外部扬声器,然后当他们再次单击时,重新启用有线耳机/蓝牙音频输出.

有谁知道这可以在 Android 10 中完成?我尝试了以下 post 中的示例但它并不始终适用于蓝牙案例。我的代码如下:

if (shouldEnableExternalSpeaker) {
audioManager.mode = AudioManager.MODE_IN_COMMUNICATION
audioManager.isSpeakerphoneOn = true
if (isBlueToothConnected) {
audioManager.stopBluetoothScoOn()
}
} else {
if (isBlueToothConnected) {
audioManager.startBluetoothSco()
}

audioManager.mode = AudioManager.NORMAL
audioManager.isSpeakerphoneOn = false
}

我还拥有用户音频的必要权限:
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

最佳答案

我认为您应该将处理分为 3 种情况,通过以下方式播放声音:

  • 通过蓝牙连接的外部设备
  • 有线耳机/设备
  • 手机喇叭

  • 生成的代码可能会像这样。
    if(shouldEnableExternalSpeaker) {
    if(isBlueToothConnected) {
    // 1. case - bluetooth device
    mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
    mAudioManager.startBluetoothSco();
    mAudioManager.setBluetoothScoOn(true);
    } else {
    // 2. case - wired device
    mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
    mAudioManager.stopBluetoothSco();
    mAudioManager.setBluetoothScoOn(false);
    mAudioManager.setSpeakerphoneOn(false);
    }
    } else {
    // 3. case - phone speaker
    mAudioManager.setMode(AudioManager.MODE_NORMAL);
    mAudioManager.stopBluetoothSco();
    mAudioManager.setBluetoothScoOn(false);
    mAudioManager.setSpeakerphoneOn(true);
    }

    即使我没有使用 AudioManager最近,这在过去对我有用。

    关于android - 如何在android 10中以编程方式切换音频输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60859938/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com