gpt4 book ai didi

ios - 核心蓝牙,如何确定检测的陈旧性?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:53:09 28 4
gpt4 key购买 nike

使用 Core Bluetooth 的 CBCentralManager ,可以使用 scanForPeripherals(withServices: [CBUUID]?, options: [String : Any]? = nil) 扫描设备。由于回调 centralManager(CBCentralManager, didDiscover: CBPeripheral, advertisementData: [String : Any], rssi: NSNumber),我可以检查设备。

实现回调 func centralManager(CBCentralManager, didDisconnectPeripheral: CBPeripheral, error: Error?) 允许检测外围设备断开(取消配对)。但是,如何在不重新扫描的情况下检测到故障(或移动)的未配对外围设备?

我是否需要定期扫描并保持配对设备的增量?

BLE 外围设备在关闭时是否会发送消息以警告监控设备,或者我是否应该假设未发送广告数据包的设备处于 sleep /死机/消失状态?广告过程是否遵循我可以信赖的明确规则,还是取决于设备的制造商/固件编写者?

最佳答案

这个有点复杂.....

在大多数情况下,如果您已连接,您就会知道设备就在附近。 (这不是 100% 正确,但通常足够接近。)因此应该列在列表中。

有可能连接手机,但不能连接您的应用程序。在这种情况下,该设备不会做广告,因此您不会看到它。您可以通过调用 retrieveConnectedPeripherals(withServices:) 来检查该列表。

然后是广告和扫描。默认配置只会向您返回一个广告设备一次。如果您将它从您的列表中清除,它就不会再被发现。您可能想要的是 CBCentralManagerScanOptionAllowDuplicatesKey(这是 scanForPeripherals(withServices:) 的一个选项。每次系统看到广告数据包时,这都会让您“发现”回调. 然后,您可以跟踪上次看到设备的时间,并清除“足够长的时间”没有看到的设备。

您也可以盲目地连接到设备(即使是当前不在身边的设备),当它最终成功时您会收到回调。这实际上是一种非常常见的技术(这是我最常使用的技术)。它甚至可以在应用程序处于后台时使用;当设备进入范围时,您将被启动。

关于ios - 核心蓝牙,如何确定检测的陈旧性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51311458/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com