扫描特定服务CBUUID时无法find外围设备

当我使用:

CBUUID * uuid = [CBUUID UUIDWithString:@"1800"]; // GAP DEBUG_LOG(@"CBUUID: %@",uuid); // CBUUID: Generic Access Profile _centralMan = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; [_centralMan scanForPeripheralsWithServices:[NSArray arrayWithObject:uuid] options:nil]; 

我找不到我的外设,但是当我使用:

 _centralMan = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; [_centralMan scanForPeripheralsWithServices:nil options:nil]; 

它立即出现

当我连接时,我能够发现/读/写我期待的所有服务。 我的理解是,GAP使这成为可能。 我也尝试了CBUUID的其他服务,我知道运行(特别是“1804”,TX电源服务),无济于事; 扫描从来没有发现任何东西。

即使服务正在运行(我可以沟通瓦特/它们连接时),当我扫描传递服务的UUIDarraysnil ,这个委托方法被称为…

 -(void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI { DEBUG_LOG(@"Found peripheral w/ UUID: %@ RSSI: %@ \n AdvData: %@",peripheral.UUID,RSSI,advertisementData); DEBUG_LOG(@"Services found: %d",peripheral.services.count); for (CBService * service in peripheral.services) { DEBUG_LOG(@"Found service: %@ w/ UUID %@",service, service.UUID); } } 

它总是报告“find的服务:0”。 我应该期望在扫描期间findservices数组来填充services数组吗? (我认为这至less是部分可能的,基于scanForPeripheralsWithServices:[NSArray arrayWithObject:uuid] options:nil 。)

这可能是我的外设的服务广告的问题吗? 我是否错误地使用API​​? 任何指导,非常感谢! 🙂

PS:我很绿,有蓝牙。

PPS:我控制源到外设(这是一个CC2540DK)。 所以我很可能会相信问题就在这里。

原来,我们的外设代码并没有宣传这个蓝牙规范的UUID。

只要我们把它们放入广告数据包中,iOS就捡起它们的汗水。