我正在尝试检查AirPods是否已连接到iPhone。如何以编程方式检查它?
对于airpods,port.portType值为.builtInMic,不足以检查airpods是否已连接到iphone
class func isMicAvailbale() -> Bool{
let availableInputs:[AVAudioSessionPortDescription] = AVAudioSession.sharedInstance().availableInputs ?? []
var micPresent = false;
for port in availableInputs
{
if port.portType == .builtInMic{
micPresent = true
}
}
return micPresent
}
答案 0 :(得分:2)
我想到的一种方法是,您可以使用Core Bluetooth
API通过蓝牙访问airpods。但是,当您可以使用AVSession时,这可能会显得有些矫kill过正。我不知道您为什么只想检测airpods而没有其他蓝牙耳机。但是我认为buildInMic
代表设备内部的buildIn麦克风,而不是蓝牙设备:P如果您查看docs可以看到:P
您没有要求其他蓝牙耳机,但是作为答案的一部分,我将向您提供此代码,该代码适用于通过蓝牙连接到iPhone的非MFI耳机。
现在是Airpod的一部分。
您可能想使用ExternalAccessory.framework
与MFI蓝牙设备(如Airpods)进行通信。~~
我尚未与EAAccessory
合作,但我相信您必须执行以下操作:
EAAccessoryManager
的实例 非常重要的一步是将UISupportedExternalAccessoryProtocols
添加到您的info.plist文件中
我有点累,所以如果您有任何问题要问,明天如果没有人会更快,我将在这里编写实现。
好吧,很明显,我的回答一开始是完全错误的。
我今天了解到,apple's MFI devices中未列出Airpods,因此ExternalAccessorymanager显然无法正常工作。如在页脚中提到的答案中所述,您要做的就是将类别添加到AVSession中。
所以整个代码基本上都在这里:D
let session = AVAudioSession.sharedInstance()
try! session.setCategory(.playAndRecord, mode: .default, options: .allowBluetooth)
guard let availableInputs = session.availableInputs else { return }
for input in availableInputs {
if input.portType == .bluetoothHFP {
// Do your stuff...
}
}
证明:
2019-01-04 02:32:13.462093+0100 Accessory games[24578:5411208] [avas] AVAudioSessionPortImpl.mm:56:ValidateRequiredFields: Unknown selected data source for Port Butcher’s AirPods (type: BluetoothHFP)
(lldb) po availableInputs
▿ 2 elements
- 0 : <AVAudioSessionPortDescription: 0x283b401b0, type = MicrophoneBuiltIn; name = iPhone Mikrofon; UID = Built-In Microphone; selectedDataSource = Vpředu>
- 1 : <AVAudioSessionPortDescription: 0x283b40250, type = BluetoothHFP; name = Butcher’s AirPods; UID = 10:94:BB:5D:5F:F7-tsco; selectedDataSource = (null)>
(lldb) po availableInputs[1].portName
"Butcher’s AirPods"
(lldb) po availableInputs[1].portType
▿ AVAudioSessionPort
- _rawValue : BluetoothHFP
(lldb)
很抱歉造成误解并写出完全脱题的答案。但是,嘿,至少您对外部配件有所了解:)
您可能还想看看here