菜鸟教程小白 发表于 2022-12-12 14:45:58

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


                                            <p><p>使用 Core Bluetooth 的 <a href="https://developer.apple.com/documentation/corebluetooth/cbcentralmanager" rel="noreferrer noopener nofollow">CBCentralManager</a> ,可以使用 <code>scanForPeripherals(withServices: ?, options: ? = nil)</code> 扫描设备。由于回调 <code>centralManager(CBCentralManager, didDiscover: CBPeripheral, advertisementData: , rssi: NSNumber)</code>,我可以检查设备。 </p>

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

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

<p>BLE 外围设备在关闭时是否会发送消息以警告监控设备,或者我是否应该假设未发送广告数据包的设备处于 sleep /死机/消失状态?广告过程是否遵循我可以信赖的明确规则,还是取决于设备的制造商/固件编写者?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这个有点复杂.....</p>

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

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

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

<p>您也可以盲目地连接到设备(即使是当前不在身边的设备),当它最终成功时您会收到回调。这实际上是一种非常常见的技术(这是我最常使用的技术)。它甚至可以在应用程序处于后台时使用;当设备进入范围时,您将被启动。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 核心蓝牙,如何确定检测的陈旧性?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/51311458/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/51311458/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 核心蓝牙,如何确定检测的陈旧性?