如何使用CoreBluetooth在中心周围找到所有已知的BLE外设?
问题描述:
我想翻译一个我开发的Android应用程序,它可以找到中心周围的所有外围设备,并将它们返回给用户。然后用户可以连接到其中的一个(或多个)来做其他事情。如何使用CoreBluetooth在中心周围找到所有已知的BLE外设?
问题:设备与CoreBluetooth连接后,在扫描过程中不再返回。应该通过已知的设备列表重新获取,该列表不提供关于返回设备附近的任何信息。
是否有比试图连接到每个已知设备知道它是否在范围更简单的方法?
编辑:已知的装置在扫描过程中确实回来了,我的工作对不具有相同的广告名称和国家新闻出版总署名BLE装置,在设备第一次连接之后重新扫描时搞糊涂了:)
答
您知道设备在范围内,如果您可以看到它的广告。
有广告的多种形式:
- 可连接
- 非连接
- 可连接的定向(白名单设备的所述外围愿意连接到)
- 非可连接的定向(的白名单即使无法连接到该设备,也能看到此外设正在进行广告的设备)
一些设备只会在您连接时宣传他们提供的服务的子集。原因在于您只能发送31个字节的广告数据,如果您使用蓝牙标准服务,则每个服务的字节数将为两个字节。如果您使用自定义服务,则只需要16个字节来宣传该服务!
它也可以公布其服务列表,所以你知道你可以用它来连接它做什么。
这意味着你应该解析返回的广告数据;这样做的范围是this Stack Overflow question。
答
我在斯威夫特3
启动应用程序时使用此
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
let perip = peripheral.identifier.uuidString
if !perip.isEmpty {
if peripheral == myPeriperal {
print("myPeriperal Ok")
}
}else{
print("no ble")
}
}
后
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
centralManager.connect(myPeriperal, options: nil)
}
如果你已经连接,但丢失,因为范围的连接,就可以得到通知。你不能使用它吗? – ladislas