ios - 应用重启后连接到蓝牙 CBPeripheral

标签 ios swift bluetooth core-bluetooth

我有一个蓝牙设备。与它连接后,我想在后台重新连接它。问题是我不知道如何在用户强制退出应用程序后重新连接到设备(即使在新应用程序启动后)

我有: 广告数据中没有服务的蓝牙设备。

因为它没有广告数据,所以我无法在后台搜索有服务的外设。因此,对于后台执行,我需要调用 centralManager.connect()

如果应用程序由于内存问题或类似问题而关闭,我可以在 centralManagers 委托(delegate)方法中恢复所有内容 willRestoreState dict 包含我可以使用 CBCentralManagerRestoredStatePeripheralsKey 获得的外围设备。 (我还实现了从 launchOptionswillFinishLaunchingWithOptions

中获取 UIApplicationLaunchOptionsKey.bluetoothCentrals

问题

如果用户没有强制退出应用程序,恢复就会起作用。所以我知道我不能自己再次使用代码重新启动应用程序。

我想要的是,如果用户重新启动应用程序以恢复我的 CBPeripheral。在我可以再次调用 centralManager.connect(peripheral) 之后。

附加信息

我将外围设备的 uuid (peripheral.identifier.uuidString) 存储在 NSUserDefault 数据中。

想法

  • 我想创建一个带有设备信息的 CBPeripheral 对象。如果我阅读的一切都是正确的,那是不可能的。
  • 如果我将 CBPeripheral 保存在 Core Data 中,我不知道如果 Apple 更改 CBPeripherals API 会发生什么,这可能不是一个好主意。
  • 苹果可以通过某种方式拍摄 CBPeripheral 的快照。我能否触发此快照,以便每次都可以使用 UIApplicationLaunchOptionsKey.bluetoothCentralsCBCentralManagerRestoredStatePeripheralsKey 恢复外围设备?

最佳答案

您首先连接到的 CBPeripheral 对象将具有标识符属性。您应该将此标识符存储到磁盘,以便您可以在稍后启动应用程序时再次加载它。然后,在创建 CBCentralManager 的新实例后,调用管理器的 retrievePeripheralsWithIdentifiers: 方法(使用您之前加载的标识符)再次获取 CBPeripheral 对象。此时您可以像之前一样连接外设。

关于ios - 应用重启后连接到蓝牙 CBPeripheral,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52967920/

相关文章:

ios - Swift - 在类中定义属性

ios - 如何检查字典值是字符串还是数组

iphone - GameKit在设备屏幕关闭或处于后台时保持连接状态

ios - 如何在 UIImageView 底部应用曲线?

arrays - 如何创建一个给出素数+ bool 值的函数?

ios - 如何检测 iOS 中是否连接了 HFP 或 A2DP?

ios - 如何让 CC2541 在广告数据中包含 kCBAdvDataServiceUUID

ios - Objective-C 中的十六进制转储

ios - 通过 TestFlight 安装 iOS 应用是否模拟应用升级?

ios - Objective C 解析问题