• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-12 14:45:58 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

使用 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 /死机/消失状态?广告过程是否遵循我可以信赖的明确规则,还是取决于设备的制造商/固件编写者?



Best Answer-推荐答案


这个有点复杂.....

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

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

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

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

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap