我正在尝试检查 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
}
Run Code Online (Sandbox Code Playgroud)
我想到的一种方法是您可以使用Core BluetoothAPI 通过蓝牙访问 airpods。但是,当您可以使用 AVSession 时,这可能是矫枉过正。我不知道为什么你只想检测 airpods 而没有其他蓝牙耳机。但我认为buildInMic代表设备内的内置麦克风而不是蓝牙设备:P 如果您查看文档,您可以看到它:P
您没有要求其他蓝牙耳机,但作为答案的一部分,我将为您提供此代码,这应该适用于通过蓝牙连接到 iPhone 的非 MFI 耳机。
现在到 Airpod 部分。
你可能想用来ExternalAccessory.framework和Airpods等MFI蓝牙设备通信~~
我还没有工作过,EAAccessory但我相信你必须做这样的事情:
EAAccessoryManager同样非常重要的一步是添加UISupportedExternalAccessoryProtocols到您的 info.plist 文件中
我有点累所以如果你有任何问题问,明天我会在这里写实现,如果没有人会更快。
好吧,显然我的回答一开始就完全错误。
我今天了解到Apple 的 MFI 设备中未列出 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...
}
}
Run Code Online (Sandbox Code Playgroud)
证明:
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)
Run Code Online (Sandbox Code Playgroud)
很抱歉误解和写完全离题的答案。但是,嘿,至少您对外部配件有所了解:)
你也可能想看看这里
| 归档时间: |
|
| 查看次数: |
2968 次 |
| 最近记录: |