iOS BLE

关于蓝牙被iOS系统结束后还可以保持连接的解决方法

2017-04-25  本文已影响33人  蘇先森

在做蓝牙连接开发的时候遇到一个问题,就是在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://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html#//apple_ref/doc/uid/TP40013257-CH7-SW1

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/

上一篇下一篇

猜你喜欢

热点阅读