change_route - ShenYj/ShenYj.github.io GitHub Wiki

切换线路

以手机为例,默认带一个内置扬声器,有时候会连接有线耳机或蓝牙耳机等其他设备,一般情况下系统都会为我们优先设置为外置设备,那程序上可能就会有切换设备的需求,而切换线路,就需要使用到AudioSession

  • 示例代码
func switchOutputDeviceDemo() {
        
    let audioSession = AVAudioSession.sharedInstance()
    log.debug("AVAudioSession outputDataSources audioSession.currentRoute.outputs: \(audioSession.currentRoute.outputs)")
    guard let current = audioSession.currentRoute.outputs.first else { return }
    
    if current.portType == AVAudioSession.Port.bluetoothA2DP {
        do {
            try audioSession.setCategory(.playAndRecord, options: .defaultToSpeaker)
            log.debug("AVAudioSession outputDataSources 强制切换线路成功")
        }
        catch {
            log.error("AVAudioSession outputDataSources 强制切换线路失败")
        }
    }
    else if current.portType == AVAudioSession.Port.builtInSpeaker {
        do {
            try audioSession.setCategory(.playAndRecord, options: .allowBluetoothA2DP)
            log.debug("AVAudioSession outputDataSources 强制切换线路成功")
        }
        catch {
            log.error("AVAudioSession outputDataSources 强制切换线路失败")
        }
    }
}
⚠️ **GitHub.com Fallback** ⚠️