Swift 如何检查Airpods是否连接到iPhone?
我正在检查AirPods是否连接到iPhone。如何以编程方式检查它 对于airpods port.portType值为.builtInMic,这不足以检查airpods是否连接到iphoneSwift 如何检查Airpods是否连接到iPhone?,swift,airpods,Swift,Airpods,我正在检查AirPods是否连接到iPhone。如何以编程方式检查它 对于airpods port.portType值为.builtInMic,这不足以检查airpods是否连接到iphone class func isMicAvailbale() -> Bool{ let availableInputs:[AVAudioSessionPortDescription] = AVAudioSession.sharedInstance().availableInputs ??
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
}
我想到的一个方法是,您可以使用
核心蓝牙
API通过蓝牙访问airpods。但如果您可以使用AVSession,这可能会有些过分。我不知道你为什么只想检测airpods而不想检测其他蓝牙耳机。但是我认为buildInMic
代表设备内部的内置麦克风,而不是蓝牙设备:P如果你仔细看一下,你会看到它:P
您没有要求其他蓝牙耳机,但作为答案的一部分,我将向您提供此代码,这应该适用于通过蓝牙连接到iPhone的非MFI耳机
现在转到Airpod部分。
您可能希望使用ExternalAccessory.framework
与MFI蓝牙设备(如Airpods)进行通信~~
我还没有使用过EAAccessory
,但我相信您必须这样做:
UISupportDexternalAccessoryProtocols
我有点累了,所以如果你有任何问题,明天我会在这里写实现,如果没有人会更快
很明显,我的答案一开始就完全错了
我今天了解到,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)
2019-01-04 02:32:13.462093+0100附属游戏[24578:5411208][avas]AVAudioSessionPortImpl.mm:56:ValidateRequiredFields:Port Butcher's AirPods的未知选定数据源(类型:BluetoothHFP)
(lldb)采购订单可用输入
▿ 2要素
-0:我想到的一个方法是,您可以使用核心蓝牙
API通过蓝牙访问airpods。但如果您可以使用AVSession,这可能会有些过分。我不知道你为什么只想检测airpods而不想检测其他蓝牙耳机。但是我认为buildInMic
代表设备内部的内置麦克风,而不是蓝牙设备:P如果你仔细看一下,你会看到它:P
您没有要求其他蓝牙耳机,但作为答案的一部分,我将向您提供此代码,这应该适用于通过蓝牙连接到iPhone的非MFI耳机
现在转到Airpod部分。
您可能希望使用ExternalAccessory.framework
与MFI蓝牙设备(如Airpods)进行通信~~
我还没有使用过EAAccessory
,但我相信您必须这样做:
创建EAAccessoryManager的实例
使用该实例获取连接的设备
通过一些ID查找airpods
找出如何检查附件是否连接,但这应该是小菜一碟李>
另一个非常重要的步骤是向info.plist文件中添加UISupportDexternalAccessoryProtocols
我有点累了,所以如果你有任何问题,明天我会在这里写实现,如果没有人会更快
很明显,我的答案一开始就完全错了
我今天了解到,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)
2019-01-04 02:32:13.462093+0100附属游戏[24578:5411208][avas]AVAudioSessionPortImpl.mm:56:ValidateRequiredFields:Port Butcher's AirPods的未知选定数据源(类型:BluetoothHFP)
(lldb)采购订单可用输入
▿ 2要素
-0:嘿,我编辑了我的答案,之前我撒了一点谎,我不知道Airpods不是苹果MFI。对不起,你的timeloss:(嘿,我编辑了我的答案,我之前撒了一点谎,我不知道Airpods不是Apple MFI。对不起,你的timeloss:(一切正常,但我在consoleAVAudioSessionPortImpl.mm:56:ValidateRequiredFields:Port Pooja的Airpods的未知选定数据源(类型:BluetoothHFP)
这个错误没关系,只是苹果方面的问题,你可以通过一些方法设置数据源。这个方法告诉我airpods是否连接到iphone,我如何判断airpods是否真的在某人的耳朵里。这不是正确答案。这个检查对任何蓝牙耳机都是肯定的,而不仅仅是AirPods@rommex写使用CoreBluetooth的down解决方案一切正常,但我在控制台中不断遇到此错误AVAudioSessionPortImpl.mm:56:ValidateRequiredFields:Port Pooja的AirPods的未知选定数据源(类型:BluetoothHFP)
这个错误没关系,只是苹果方面的问题,你可以通过一些方法设置数据源。这个方法告诉我airpods是否连接到iphone,我如何判断airpods是否真的在某人的耳朵里。这不是正确答案。这个检查对任何蓝牙耳机都是肯定的,而不仅仅是AirPods@rommex写使用CoreBluetooth的停机解决方案