iOS 8 CoreBluetooth 废弃了 RSSI 方法

8

从阅读CBPeripheralDelegate文档的内容来看,似乎在iOS 8中已经废弃了RSSIperipheralDidUpdateRSSI:error:方法。

Xcode警告:

'rssi'在iOS 8.0中已被废弃

我注意到我的信号强度指示器不再更新,因此我进行了一些研究并找到了一个新方法([CBPeripheralDelegate peripheral:didReadRSSI:error:]),据说在调用readRSSI方法后会以异步回调的方式被调用。不幸的是,即使我将父类设置为CBPeripheral代理,这个方法似乎也没有被回调。

还有其他人遇到过iOS 8 CoreBluetooth更新的问题吗?

4个回答

9

在苹果开发者论坛上已经发布了一个已知的问题,并且我也有一个未解决的radar。

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

这是我提交的radar链接。

更新:

我刚刚测试了我的示例,该示例显示出这个问题,但在当前的8.2版本中,我不再看到新的iOS 8委托方法没有被调用的任何问题。根据8.2版本,我将我的radar标记为已解决。


1
在iOS 8.1.3上看到完全相同的问题。 - James Parker
我一直在测试每个 beta 版本,下一个即将发布的版本似乎已经解决了这个问题。 - Robert Haworth

4
在iOS 8.1.1中,只有已连接的外围设备才会调用peripheral:didReadRSSI:error:。如果您仅仅是通过扫描发现了外围设备,然后调用了readRSSI,回调函数将不会被调用。
尝试先连接到外围设备(通过CBCentralManagerconnectPeripheral:options:),然后再调用readRSSI

2
这并没有提供问题的答案。如果要批评或请求作者澄清,请在他们的帖子下留言 - 您始终可以在自己的帖子上发表评论,并且一旦您拥有足够的声望,您将能够评论任何帖子 - 4b0
4
实际上它提供了对这个问题的答案。他的问题涉及到peripheral:didReadRSSI:error:没有被调用,并询问是否有其他人遇到过此类问题。我也遇到了此类问题,而且我找到了解决方案:在iOS 8中连接到外设,以便CoreBluetooth调用那个委托方法。 - David Shoemaker
只有在第一次连接外设并调用[peripheral readRSSI]时,才能成功返回。任何后续的连接都将无法调用didReadRSSI委托方法。 - James Parker
@Shree:这实际上是定期刷新观察但未连接到外围设备的RSSI的唯一方法。虽然它并没有直接回答问题,但提供了一个解决方案。 - Rok Jarc

1

它在iOS 8.0.2上可以运行,但现在被限制了。我每200毫秒发送一个readRSSI请求,但只能每秒收到一次响应。在iOS 7.1上它运行得很好。


0

iOS 8.0.2上它再次工作!

使用[myPeripheral readRSSI];


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接