使用Core Bluetooth

时间:2017-12-21 16:31:54

标签: ios bluetooth-lowenergy core-bluetooth ios-bluetooth

我正在开发的iPhone应用程序需要在前景和后台使用CBCentralManager建立本地连接后立即每秒读取外围设备的RSSI。这意味着在调用CBCentralManagerScanOptionAllowDuplicatesKey时将true设置为scanForPeripherals(withServices:options:)是不可能的,因为当应用程序在后台运行时它被忽略,并且它仅通过{{1启用RSSI更新}} CBCentralManagerDelegate方法,此时外围设备尚未连接。

this answer的启发我在外设中实现了一个具有centralManager(_:didDiscover:advertisementData:rssi:)属性的特性,并且每秒更新一次。在我的应用中,我使用notify的{​​{1}}方法通过CBPeripheral通知特征更新。在这种方法中,我调用setNotifyValue(_:for:)并通过peripheral(_:didUpdateValueFor:error:)大致每秒获得一次RSSI更新。

我的代码的简化版本如下所示:

peripheral.readRSSI()

结合核心蓝牙状态保存和恢复的正确实现,这似乎工作得很好。即使这似乎是一个可接受的解决方案,我仍然想知道是否有其他解决方案不依赖于外设中的自更新特性。

我已经考虑过使用iBeacon(与蓝牙外设并行),但这对我们来说不是一个好的解决方案,因为它很容易被欺骗,我们在设置连接时依赖某些验证方法来确保外设是真的

是否有人使用Core Bluetooth在前台和后台应用状态下轮询蓝牙外设的RSSI?您是否找到了替代/不同/更好的解决方案?

0 个答案:

没有答案