我正在扫描硬件设备。 在前台我可以看到设备。 当我在前景中开始扫描而不是移动到背景时,比我打开硬件BLE,扫描停止,应用程序无法检测到硬件。
如果我将应用程序打开到前台,则继续扫描并找到设备。
我设置了键:
<string>bluetooth-peripheral</string>
<string>bluetooth-central</string>
以及后台模式:
location updates
external accessory communication
uses BLE accessories
acts as BLE ACCESSORY
但没有。系统不允许我在背景上检测设备,只检测前景。
我缺少什么?
答案 0 :(得分:0)
发现您必须在后台设置您要查找的服务ID,否则它将无法正常工作。 无论如何,背景中的扫描非常慢,可能需要几分钟才能检测到!!
[_centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:DEVICE_INFO_SERVICE_UUID]]
答案 1 :(得分:0)
您只能在后台扫描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]];
});