【问题标题】:How to get unique ID of Bluetooth Device using Core Bluetooth in iOS如何在 iOS 中使用 Core Bluetooth 获取蓝牙设备的唯一 ID
【发布时间】:2020-12-29 21:13:27
【问题描述】:

我正在开发一个应用程序,它需要 ios 设备提供蓝牙 UUID(从扫描/连接的设备获取蓝牙 UUID),然后将其发送到服务器以进行进一步开发。我在互联网上找不到任何答案。

我正在使用核心蓝牙扫描和连接设备并发送设备信息名称和 uuid,但 uuid 每 15-20 分钟更改一次。如何识别之前连接的设备以​​及如何获得唯一的 BLE 设备 UUID 以便我可以将标识符与之前添加的设备列表匹配。 请帮忙...

【问题讨论】:

    标签: ios swift bluetooth bluetooth-lowenergy pairing


    【解决方案1】:

    您可以获取发现的CBPeripheralidentifier 属性并连接到该属性。如果您连接,那么该设备的标识符在很长一段时间内都不会改变(实际上我认为它永远不会改变,但理论上它可以)。

    一旦您有了外设标识符,您就可以保存该值,然后通过retrievePeripherals 而不是扫描来获取外设。

    您将面临的问题是identifier 特定于发现外围设备的 iOS 设备。另一台 iOS 设备将获得相同外围设备的不同标识符。

    如果您需要一个可跨 iOS 设备传输的外围设备的唯一标识符,那么您需要通过外围设备本身的特性公开这样的值,并让您的应用在连接后读取该特性值。

    【讨论】:

    • 好的@Paulw11 谢谢。我已将 BLE 标识符保存到后端数据库,并且可以使用 retrievePeripherals 搜索 BLE 设备,但是当我尝试连接它时,出现错误名称为“API MISUSE:取消未使用外围设备的连接 ,您是否忘记保留对它的引用?"
    • 正如错误所说,您需要保持对 CBPeripheral 实例的强引用;即在一个属性中,而不仅仅是一个局部变量。
    • 让 getData = self.centralManager.retrievePeripherals(withIdentifiers: ids) if getData.count > 0 { if getData[0].identifier.uuidString == self.carsList[i].bluetooth_identifier{ getData[ 0].delegate = self // self.centralManager.cancelPeripheralConnection(getData[0]) self.centralManager.connect(getData[0], options: nil) } } } 当我评论 self.centralManager.cancelPeripheralConnection 行时它没有给出任何错误。但没有调用 didConnect 外围函数。
    • getData 是一个局部变量。一旦该闭包或函数退出,它将被释放,这就是警告告诉你的。您需要在属性中保持对外围设备的强引用。
    • 你能指导我如何做到这一点。
    猜你喜欢
    • 2012-12-14
    • 1970-01-01
    • 2017-01-08
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2020-08-16
    • 2014-05-05
    相关资源
    最近更新 更多