进入后台时停止BLE扫描?

Posted

技术标签:

【中文标题】进入后台时停止BLE扫描?【英文标题】:BLE scanning is stopped when go to background? 【发布时间】:2014-11-24 18:07:47 【问题描述】:

我正在扫描硬件设备。 在前台时,我可以看到该设备。 当我在前台开始扫描,而不是移动到后台时,比我打开硬件-BLE,扫描停止,并且应用程序无法检测到硬件。

如果我将应用程序重新打开到前台,它会继续扫描并找到设备。

我已经设置好钥匙了:

  <string>bluetooth-peripheral</string>
        <string>bluetooth-central</string>

还有背景模式:

location updates
external accessory communication
uses BLE accessories
acts as BLE ACCESSORY

但什么都没有。系统不会让我检测后台设备,只检测前台设备。

我错过了什么?

【问题讨论】:

【参考方案1】:

发现您必须设置您在后台查找的服务ID,否则它将无法正常工作。 无论如何,后台扫描非常缓慢,可能需要几分钟才能检测到!

 [_centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:DEVICE_INFO_SERVICE_UUID]]

【讨论】:

【参考方案2】:

您只能在后台扫描 BLE 以获得特定的 serviceUUID,您可以像我们在前台扫描一样通过传递 nil 进行扫描。

另外,请确保在主线程中启动 BLE 扫描并设置正确的选项,如下所示。

 NSArray *services = @[[CBUUID UUIDWithString:UUID1],[CBUUID UUIDWithString:UUID2],[CBUUID UUIDWithString:UUID3]];
dispatch_async(dispatch_get_main_queue(), ^
    [self.coreBluetoothManager scanForPeripheralsWithServices:services options:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber  numberWithBool:YES], CBCentralManagerScanOptionAllowDuplicatesKey, nil]];
);

【讨论】:

以上是关于进入后台时停止BLE扫描?的主要内容,如果未能解决你的问题,请参考以下文章

Cordova:在后台模式下扫描 iBeacons / BLE(iOS 和 Android)

iOS - 在后台扫描 BLE 设备

在 iOS 后台实现 BLE 扫描

为啥在 IntentService 中进行的 BLE 扫描即使在服务被破坏时也能继续工作?

主动 BLE 扫描 (BlueZ) - DBus 问题

iOS BLE使用(用户)杀死App进行扫描