有没有办法强迫"强迫"一个iOS应用程序(编码为BLE Central)继续在后台执行BLE扫描,就像它在前台运行一样?我们使用RSSI来确定接近度,应用程序必须在后台运行并处理RSSI级别。注意:正如您可能知道或不知道的那样,RSSI噪声非常大,需要使用尽可能多的样本进行滤波以获得准确的接近度。我们尝试连接然后立即将应用程序与BLE外围设备断开连接,但是使用此方法可以防止外围设备在连接到iOS应用程序时进行广告宣传。实际上,这限制了附近其他iOS设备所需的BLE外围设备的广告量,因此理想情况下,我们宁愿不使用此方法。对于那些希望权衡这个问题的人,我们可以通过BLE外围设备修改广告有效载荷的任何或所有部分。
答案 0 :(得分:1)
您无法强制iOS应用执行违反Apple规则的操作。如果您想继续扫描BLE设备,您的应用需要处于前台状态。
或者,您可以在后台监控BLE设备。只要BLE设备靠近您的设备,您就可以在有限的时间内扫描设备 - 也可以在后台扫描。
let beaconRegion = CLBeaconRegion(proximityUUID: "some uuid", major: 1, minor: 1, identifier: "some identifier")
locationManager.startMonitoring(for: beaconRegion)
但是,我不知道这是否适合您的使用案例。
答案 1 :(得分:0)
您可以使用服务UUID在后台继续BLE扫描。您必须扫描特定服务UUID。使用以下方法在后台扫描。
open func scanForPeripherals(withServices serviceUUIDs:[CBUUID] ?, options:[String:Any]?= nil)
您需要在.plist文件中设置后台模式。设置所需的背景模式' as' App使用CoreBluetooth'。
进行通信