应用重启后连接到蓝牙CBPeripheral

时间:2018-10-24 11:33:08

标签: ios swift bluetooth core-bluetooth

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

我所拥有的: 一种没有广告数据服务的蓝牙设备。

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

如果应用由于内存问题或类似原因而关闭,我可以在 centralManagers 委派方法 willRestoreState 中恢复所有内容。 dict 包含我可以通过 CBCentralManagerRestoredStatePeripheralsKey 获得的外围设备。 (我还实现了从 willFinishLaunchingWithOptions

中的 launchOptions 中获取 UIApplicationLaunchOptionsKey.bluetoothCentrals

问题

如果用户不强行退出应用程序,则恢复工作正常。因此,我知道我自己无法再次使用代码重新启动应用。

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

其他信息

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

想法

  • 我考虑过使用设备信息创建CBPeripheral对象。如果我没看错一切,那是不可能的。
  • 如果我将CBPeripheral保存在核心数据中,我不知道如果苹果更改CBPeripherals API会发生什么,那可能不是一个好主意。
  • 苹果可以通过某种方式拍摄CBPeripheral的快照。我可以触发此快照,以便每次使用 UIApplicationLaunchOptionsKey.bluetoothCentrals CBCentralManagerRestoredStatePeripheralsKey 还原外围设备吗?

1 个答案:

答案 0 :(得分:1)

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