Ios Swift中BLE的背景扫描

Ios Swift中BLE的背景扫描,ios,swift,bluetooth-lowenergy,Ios,Swift,Bluetooth Lowenergy,我试图让我的应用程序在后台扫描BLE设备,并在Swift中搜索一些广告数据。我在这里找不到任何关于这方面的教程或问题 基本上,当应用程序不在前台且用户重新启动手机时,是否有一种在后台自动执行此操作的方法 我希望你能给我指出正确的方向。谢谢步骤1:为您的项目功能启用蓝牙后台模式 步骤2:确保已将适当的内容添加到info.plist文件中 以下是plist代码(如果未添加): <key>UIBackgroundModes</key> <array> &

我试图让我的应用程序在后台扫描BLE设备,并在Swift中搜索一些广告数据。我在这里找不到任何关于这方面的教程或问题

基本上,当应用程序不在前台且用户重新启动手机时,是否有一种在后台自动执行此操作的方法


我希望你能给我指出正确的方向。谢谢

步骤1:为您的项目功能启用蓝牙后台模式

步骤2:确保已将适当的内容添加到info.plist文件中

以下是plist代码(如果未添加):

<key>UIBackgroundModes</key>
 <array>
  <string>audio</string>
  <string>bluetooth-central</string>
 </array>
现在如果你关心选项,你可以传递一个选项字典来代替我上面传递的nil。通常,这用于指定在连接之前是否要连续查看设备RSSI,或者是否只需要广告包一次。提出:

println(advertisementData["kCBAdvDataLocalName"] as! String) 
println(advertisementData["kCBAdvDataManufacturerData"] as! NSData)
在“DidDiscoveryPeripheral”委托方法中观察不同的行为

如果需要重复的密钥,请传递以下词典:

let dictionaryOfOptions = [CBCentralManagerScanOptionAllowDuplicatesKey : true]
self.myBluetoothManager?.scanForPeripheralsWithServices(arrayOfServices, options: dictionaryOfOptions)
现在它默认这个扫描选项为false,但从iOS 8.3开始,我看到它一直使用重复的键进行扫描


关于后台执行的最后一点说明。如果iOS决定暂停您的应用程序,扫描将停止。如果有一堆应用程序正在运行,我会在30秒后看到这种情况发生。

我几乎肯定这在iOS中是被禁止的。所以,不,我认为这是不可能的。在所有可能的情况下,您可能希望使用类似Bluetooth classic的东西。然而,并不是所有人都可以在iOS上使用Bluetooth classic。你必须是苹果MFI程序的一员,并获得苹果公司的特别许可。只要该设备是在为一项BLE GATT服务做广告,那么在后台扫描服务将包含在苹果公司的核心蓝牙编程指南中。你读过吗?你有没有尝试过基于此的方法?是的,我读到的内容涉及基于UUID和标识符识别设备。我试图通过广告数据来实现这一点,而不实际连接到外围设备,可能需要对广告数据进行后台扫描。
let dictionaryOfOptions = [CBCentralManagerScanOptionAllowDuplicatesKey : true]
self.myBluetoothManager?.scanForPeripheralsWithServices(arrayOfServices, options: dictionaryOfOptions)