【问题标题】:ios ble data lost after being killed in background mode在后台模式下被杀死后ios ble数据丢失
【发布时间】: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;

标签: ios bluetooth-lowenergy


【解决方案1】:

在 iOS 上,您可以使用 State Preservation and Restoration 确保您的应用不会被系统完全杀死。请查看以下链接以获取更多信息:-

Core Bluetooth Background Processing for iOS

但是,请注意,如果您强制终止应用程序,您将无法使用此功能。以下问题中有关于此的更多信息:-

BLE device keep connect with iPhone when application terminate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-15
    • 2016-12-26
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 2012-08-26
    相关资源
    最近更新 更多