【发布时间】:2019-08-03 15:22:17
【问题描述】:
我有一个从特定设备接收 BLE 信息的 iPhone 应用。设备在需要报告的任何时候都会向我的应用发送数据,传输速率约为每秒 2K 字节。
问题是我的应用程序可以在后台模式下被 iOS 杀死,我无法得到任何迹象。如果我的app被kill后设备开始发送ble数据,我的app只能在被系统唤醒后才能得到最后一个数据包,并且在唤醒过程中丢失了所有数据。
我的应用程序被系统唤醒并恢复后,如何获取所有 BLE 数据?
PS:我在 Info.plist 的 UIBackgroundModes 下添加了蓝牙中心。在后台模式下,didUpdateValueForCharacteristic: 方法被调用。另外,在我构造 CBCentralManager 时指定了 CBCentralManagerOptionRestoreIdentifierKey。
【问题讨论】:
-
您可以在调用发生developer.apple.com/documentation/uikit/uiapplicationdelegate/…时存储数据包,当应用程序被唤醒时您可以重新启动。另外,stackoverflow.com/questions/33125295/… 用于适当的状态保存。
-
@Sachin Vas 我订阅了特征通知。[peripheral setNotifyValue:true forCharacteristic:ch];当外围设备通知数据时,系统将重新启动我的应用程序。但是我只能通过读取名为 value 的属性来获取最后的数据,并且在我的应用程序可以工作之前,外围设备已经通知丢失了数据。 @property(retain, readonly, nullable) NSData *value;