Swift中的BLE背景扫描
我试图让我的应用程序在后台扫描BLE设备,并在Swift中搜索一些广告数据。 我一直无法在这里找到任何有关此内容的教程或问题。
基本上,当应用程序不在前台并且用户重新启动手机时,有没有办法在后台自动执行此操作?: 使用iOS获取蓝牙LE扫描响应数据
我希望你能指出我正确的方向。 谢谢
第1步:为您的项目function启用蓝牙背景模式
第2步:确保将相应的内容添加到info.plist文件中
这是plist代码,如果它没有添加它:
UIBackgroundModes audio bluetooth-central
然后,当您在CBCentralmanager上调用“scanForPeripheralsWithServices”时,您必须指定要扫描的服务数组。 你不能传递一个空数组。 如果你传递的是nil,它仍会扫描,而不是在后台。
所以指定一个服务UUID的数组是这样的:
let arrayOfServices: [CBUUID] = [CBUUID(string: "8888")] self.myBluetoothManager?.scanForPeripheralsWithServices(arrayOfServices, options: nil)
现在,如果你关心选项,你可以传递一个选项字典来代替我在上面传递的nil。 大多数情况下,这用于指定在连接之前是否要连续查看设备RSSI,或者只是想要广告数据包一次。 放一个:
println(advertisementData["kCBAdvDataLocalName"] as! String) println(advertisementData["kCBAdvDataManufacturerData"] as! NSData)
在“didDiscoverPeripheral”委托方法中观察不同的行为。
如果您想要重复键,这是您将传递的词典:
let dictionaryOfOptions = [CBCentralManagerScanOptionAllowDuplicatesKey : true] self.myBluetoothManager?.scanForPeripheralsWithServices(arrayOfServices, options: dictionaryOfOptions)
现在Apple说,当你的应用程序进入后台模式时,它默认此扫描选项为false,但从iOS 8.3开始,我看到它继续扫描重复键。
关于背景执行的最后一点说明。 如果iOS决定暂停您的应用,扫描将停止。 如果有一堆应用正在运行,我已经看到这种情况会在30秒内发生。