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 强制切换线路失败")
}
}
}