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

ios - 为什么 CoreBluetooth 一次又一次地发现相同的外设?

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

我在 StackOverflow 上查看过类似的问题,但它们都处理了由于接收到扫描响应数据而对 CBManager 委托(delegate)的 didDiscover 方法的第二次调用。我的情况不同。

我坐在家里的办公 table 前。我的应用在 iPhone 6、iOS 10.2 上运行。我的应用程序在没有指定任何服务 uuid 的情况下开始扫描(即发现所有外围设备)。我的应用程序未连接到发现的任何外围设备。正在发现五种不同的外围设备,其中包括我开发的 MacBook Pro,它通过 USB/Lightening 电缆连接到 iPhone。

我的应用程序在 MacBook Pro 上表现异常。 MacBook Pro 一次又一次地调用 didDiscover 方法。最后它停止了;直到我移动 MacBook Pro 的光标或点击键盘上的一个键;然后它又开始了。其他四个外围设备不会出现这种情况,其中包括两台 Apple TV。

这是我的 didDiscover 方法:

 @objc func centralManager(_ manager: CBCentralManager, didDiscover cbPeripheral: CBPeripheral, advertisementData data: [String : Any], rssi signalStrength: NSNumber) {
    NSLog("eripheral discovered: \(cbPeripheral)")
}

这是来自控制台的示例:

enter image description here

我不知道该怎么想。我想不出任何我可能会尝试或检查的东西来揭示有关正在发生的事情的更多信息。任何想法将不胜感激。

更新 1:

首先是一些附加信息:

  1. 我将 nil 传递给 scanForPeripherals 方法的选项参数
  2. 如果我连接到 MacBook Pro,那么调用 didDiscover 的频率会从大约每秒减少到大约每分钟。

但是,正如 CuriousRabbit 指出的那样,那又如何呢?好吧,鉴于这种行为不是我疏忽的结果,我剩下的就是:我如何编码?目前,我最好的选择是:

  1. 第一次调用 didDiscover - 执行我所做的以响应被发现的外围设备。
  2. 第二次调用 - 可能有感兴趣的扫描响应数据;见 here
  3. 后续调用 - 忽略

你们觉得这对吗?

而且,如果这里学到的教训是期望在外围设备发送广告数据包时调用 didDiscover(重新 CuriousRabbit 的“你的 MacBook 正在积极地做广告”评论),那么为什么我看不到其他四个外围设备的这种行为?



Best Answer-推荐答案


对于没有指定 CBCentralManagerScanOptionAllowDuplicatesKey 的情况,Apple documentation (请参阅“仅在必要时指定 CBCentralManagerScanOptionAllowDuplicatesKey 选项”部分)指出,只要广告数据发生更改,就会重复调用 didDiscoverPeripheral 方法。

我观察到的是,如果信号强度 (rssi) 发生变化,也会发生重复调用。 对于 MacBook Pro,rssi 值会上下波动(尽管有时会有两个背靠背日志陈述,其中它没有改变,但一般来说它正在改变)。广告数据永远不会改变。还;在极少数情况下,当对其他外围设备之一重复发现外设时,更改的是 rssi 值。

我非常有信心 rssi 的变化可以解释我所看到的行为。

关于ios - 为什么 CoreBluetooth 一次又一次地发现相同的外设?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43351664/

回复

使用道具 举报

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

本版积分规则

关注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