应用找不到音频蓝牙 HFP 免提端口 Swift
App unable to find AVAudio BluetoothHFP Handsfree port Swift
在我的应用程序中,我想检查已经连接到 phone 的 AVAudio 端口类型。下面的代码适用于 BluetoothA2DP 和 Headphones,但当我将 phone 连接到我的汽车免提装置时不适用于 BluetoothHFP。谁能帮我?!我认为已经浏览了 Handsfree/AV/Bluetooth 上的所有 SO 帖子以及许多其他帖子,但无法弄清楚为什么它无法识别 BluetoothHFP 输出端口类型。
import AVFoundation
func startCheckAVConnection() {
// set the AVAudioSession to allow bluetooth. This do/try/catch doesn't seem to make a difference if it is here or not.
do{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, with: AVAudioSessionCategoryOptions.allowBluetooth)
} catch{
print(error)
}
// Check possible outputs for handsfree
let outputs = AVAudioSession.sharedInstance().currentRoute.outputs
if outputs.count != 0 {
for output in outputs {
if output.portType == AVAudioSessionPortBluetoothA2DP {
peripheralLabel.text = "connected to BluetoothA2DP"
} else if output.portType == AVAudioSessionPortBluetoothHFP { // NOT RECOGNISED
peripheralLabel.text = "connected to BluetoothHFP"
} else if output.portType == AVAudioSessionPortHeadphones {
peripheralLabel.text = "connected to Headphones"
}
}
} else {
peripheralLabel.text = "Please connect handsfree"
}
// Add observer for audioRouteChangeListener
NotificationCenter.default.addObserver(
self,
selector: #selector(TopVC.audioRouteChangeListener(_:)),
name: NSNotification.Name.AVAudioSessionRouteChange,
object: nil)
}
尝试将类别设置更改为:
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, with: AVAudioSessionCategoryOptions.allowBluetooth)
HFP 不适用于多路由类别 AFAICT。
我需要在 setCategory 之后添加 setActive。
do { try AVAudioSession.sharedInstance().setActive(true)
print("setActive")
} catch {
print(error)
}
在我的应用程序中,我想检查已经连接到 phone 的 AVAudio 端口类型。下面的代码适用于 BluetoothA2DP 和 Headphones,但当我将 phone 连接到我的汽车免提装置时不适用于 BluetoothHFP。谁能帮我?!我认为已经浏览了 Handsfree/AV/Bluetooth 上的所有 SO 帖子以及许多其他帖子,但无法弄清楚为什么它无法识别 BluetoothHFP 输出端口类型。
import AVFoundation
func startCheckAVConnection() {
// set the AVAudioSession to allow bluetooth. This do/try/catch doesn't seem to make a difference if it is here or not.
do{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, with: AVAudioSessionCategoryOptions.allowBluetooth)
} catch{
print(error)
}
// Check possible outputs for handsfree
let outputs = AVAudioSession.sharedInstance().currentRoute.outputs
if outputs.count != 0 {
for output in outputs {
if output.portType == AVAudioSessionPortBluetoothA2DP {
peripheralLabel.text = "connected to BluetoothA2DP"
} else if output.portType == AVAudioSessionPortBluetoothHFP { // NOT RECOGNISED
peripheralLabel.text = "connected to BluetoothHFP"
} else if output.portType == AVAudioSessionPortHeadphones {
peripheralLabel.text = "connected to Headphones"
}
}
} else {
peripheralLabel.text = "Please connect handsfree"
}
// Add observer for audioRouteChangeListener
NotificationCenter.default.addObserver(
self,
selector: #selector(TopVC.audioRouteChangeListener(_:)),
name: NSNotification.Name.AVAudioSessionRouteChange,
object: nil)
}
尝试将类别设置更改为:
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, with: AVAudioSessionCategoryOptions.allowBluetooth)
HFP 不适用于多路由类别 AFAICT。
我需要在 setCategory 之后添加 setActive。
do { try AVAudioSession.sharedInstance().setActive(true)
print("setActive")
} catch {
print(error)
}