【发布时间】:2018-01-01 19:42:29
【问题描述】:
我正在扫描蓝牙设备。为此我使用CBCentralManager,就像这样
- (void)startScanning
{
[self.centralManager scanForPeripheralsWithServices:nil options:@{ CBCentralManagerScanOptionAllowDuplicatesKey : @YES }];
}
- (void)centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI
{
NSLog(@"\n%@, rssi: %@", peripheral.identifier.UUIDString, RSSI);
// do stuff
}
我正在使用 Estimote 应用程序在其他设备上模拟 Beacon。控制台输出如下所示:
2017-07-26 14:43:56.711830 ExampleApplication[445:55698] 外围设备:
6A3E0CB4-74BB-4472-98AA-0C9DEB1D4551,RSSI:-28
到目前为止一切都很好。
现在,我还想在应用处于后台时扫描蓝牙设备。为此,我将此类属性添加到Info.plist
<key>UIBackgroundModes</key>
<string>bluetooth-central</string>
另外,我读到当将nil 传递为serviceUUIDs 时,无法在后台扫描蓝牙设备,因此我将之前发现的外围设备的 UUID 传递给CBCentralManager
CBUUID *uuid = [CBUUID UUIDWithString:@"6A3E0CB4-74BB-4472-98AA-0C9DEB1D4551"];
[self.centralManager scanForPeripheralsWithServices:@[uuid] options:options];
还有一个问题——didDiscoverPeripheral 不再被调用,即使应用程序处于前台也是如此。是什么原因?我使用之前发现的设备的 UUID 没有问题,但不是。有什么想法吗?
【问题讨论】:
-
您需要扫描外围设备正在通告的服务的 uuid,而不是外围设备的 uuid。外围设备的 uuid 可以改变,不同的 iOS 设备会看到同一个外围设备的不同 uuid,但服务外围设备是一致的。
-
问题是我收到的任何外设,
services属性都是空的 -
@mag_zbc 如果你的外设没有在它的广告中加入一些服务(通过给它的服务 UUID),你不能专门扫描它,因为如果它没有做广告,您需要连接并扫描其服务。
标签: ios objective-c core-bluetooth cbcentralmanager