CBCentralManager.retrieveConnectedPeripherals()返回什么设备?

时间:2019-06-06 06:09:00

标签: ios swift ios-bluetooth

我想检查我的iPhone连接到哪些蓝牙设备。为了做到这一点,我像这样使用CBCentralManager.retrieveConnectedPeripherals()

let connectedPerphs = centralManager.retrieveConnectedPeripherals(withServices: []);

我的问题是,即使我的iPhone已连接到BluetoothDongle(它在设置中明确表示“已连接”),由retriveConnectedPeripherals()返回的列表也始终为空。我是否以错误的方式使用该方法,或者不能将其用于检测蓝牙连接,例如与加密狗的连接?如果是后者,我如何检测到该连接?

2 个答案:

答案 0 :(得分:0)

让我清楚,centralManager.retrieveConnectedPeripherals始终返回空值或nil,如果您没有将任何值传递到serviceUUIDs

retrieveConnectedPeripherals(withServices:)

  

返回外围设备的列表(包含任何指定的   服务)当前已连接到系统。

serviceUUID:

  

服务UUID列表(由CBUUID对象表示)。

更新:

不幸的是,这是很长的路要走。您可以静态创建Array中的CBUUID,然后将其传递给方法。请参考下面的代码。

let aryUUID = ["1800","18811"]
var aryCBUUIDS = [CBUUID]()

for uuid in aryUUID{
    let uuid = CBUUID(string: "1800")
    aryCBUUIDS.append(uuid)
}
let connectedPerphs = centralManager.retrieveConnectedPeripherals(withServices: aryCBUUIDS)

List of available services

答案 1 :(得分:0)

首先,这仅适用于BLE设备,因此,如果您的加密狗使用的是通用BT,您将无法从此处获得它,而是可能使用EAAccessoryManager var connectedAccessories: [EAAccessory]方法,但据我所知您的应用必须符合MFI。
这就是为什么要询问您的设备将作为筛选器公开哪些服务。