扫描特定服务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就捡起它们的汗水。