关于蓝牙被iOS系统结束后还可以保持连接的解决方法
在做蓝牙连接开发的时候遇到一个问题,就是在iOS连接完蓝牙后,再运行其它程序,有时就会出现因系统内存不足被结束连接,这种情况就会影响使用,所以为了解决这个查看了很多资料,终于解决了。
这个是iOS特有的一个解决方法,Core Bluetooth State Preservation and Restoration,就是在被终结的时候会把连接的蓝牙信息存储起来,以后会根据这个来恢复连接。
需要改动的地方有这几个:
1.初始化蓝牙管理
centralManager = CBCentralManager(delegate: self, queue: nil, options: [CBCentralManagerOptionRestoreIdentifierKey : restoreIdentifier])
你需要在初始化的时候设定特定需要恢复连接的蓝牙标示restoreIdentifier,在恢复的时候会用到。
2.启动的时候恢复蓝牙
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if let launchOptions = launchOptions { // 2 if let centralManagerUUIDs = launchOptions[UIApplicationLaunchOptionsBluetoothCentralsKey] as? Array{
for id in centralManagerUUIDs {
if id == Device.centralRestoreIdentifier {
// Restore the CBCentralManager here
}
}
}
}
return true
}
3.触发恢复蓝牙的时候的操作
func centralManager(central: CBCentralManager, willRestoreState dict: [String : AnyObject]) { // 1 if let peripheralsObject = dict[CBCentralManagerRestoredStatePeripheralsKey] { // 2 let peripherals = peripheralsObject as! Array// 3
if peripherals.count > 0 {
// 4
peripheral = peripherals[0]
// 5
peripheral?.delegate = self
}
}
}
4.另外,为了确保蓝牙已连接,可以在更新状态的时候判断下,如果没有连接成功,再次开启扫描连接。
参考的资料:
https://www.cloudcity.io/blog/2016/09/14/zero-to-ble-on-ios--part-three/
https://news.realm.io/news/altconf-shuichi-tsutsumi-practical-core-bluetooth/