【问题标题】:iOS 8 CoreBluetooth deprecated RSSI methodsiOS 8 CoreBluetooth 已弃用 RSSI 方法
【发布时间】:2024-01-01 01:25:01
【问题描述】:

因此,从阅读 CBPeripheralDelegate 文档来看,RSSIperipheralDidUpdateRSSI:error: 似乎已在 iOS 8 中被弃用。

Xcode 警告:

'rssi' 在 iOS 8.0 中已弃用

我注意到我的信号强度指示器不再更新,所以我做了一些研究,发现了一个新方法 ([CBPeripheralDelegate peripheral:didReadRSSI:error:]),据说在调用 readRSSI 方法后会异步回调。不幸的是,这个方法似乎也没有被回调,即使我确实将父类设置为 CBPeripheral 委托。

还有其他人对 iOS 8 CoreBluetooth 更新有疑问吗?

【问题讨论】:

    标签: ios objective-c ios8 core-bluetooth


    【解决方案1】:

    在 Apple 开发者论坛上发布了一个关于此的已知问题,对此我也有一个开放的雷达。

    问题似乎是新的回调方法peripheral:didReadRSSI:error: 在与外围设备建立初始连接后从未在iOS 8 上调用。我发现的唯一解决方案是通过打开/关闭手机或重新启动手机来重置手机上的蓝牙。

    Here is the link to open radar I filed.

    更新:

    刚刚测试了我的示例,该示例在当前 8.2 版本中显示此问题,并且我不再看到新的 iOS 8 委托方法从未被调用的任何问题。根据 8.2 版本,我将我的雷达标记为已解决。

    【讨论】:

    • 在 iOS 8.1.3 上看到完全相同的问题。
    • 我一直在测试每个 beta 版本,下一个即将发布的版本似乎已经解决了这个问题。
    【解决方案2】:

    在 iOS 8.1.1 中,peripheral:didReadRSSI:error: 只会被您连接的外围设备调用。如果您只是通过扫描发现外围设备,然后在它们上调用readRSSI,则不会调用回调。

    尝试先连接到外围设备(通过CBCentralManagerconnectPeripheral:options:),然后调用readRSSI

    【讨论】:

    • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post
    • 实际上它确实提供了问题的答案。他的问题涉及peripheral:didReadRSSI:error: 没有接到电话,他问是否有其他人对此有疑问。我确实遇到了问题,我找到了在 iOS 8 中让 CoreBluetooth 调用该委托方法的解决方案:连接到外围设备。
    • 这只会在你第一次连接外设并调用[外设readRSSI]时成功返回。任何后续连接都将无法调用 didReadRSSI 委托方法。
    • @Shree:这实际上是定期刷新观察到但未连接到外围设备的 RSSI 的唯一方法。虽然它本身并没有回答问题,但它提供了一个解决方案。
    【解决方案3】:

    它适用于 iOS 8.0.2,但现在受到限制。我每 200 毫秒发送一次 readRSSI,每秒只得到一次响应。它在 iOS 7.1 上运行良好。

    【讨论】:

      【解决方案4】:

      它在 iOS 8.0.2 中再次运行!

      使用[myPeripheral readRSSI];

      【讨论】: