扫描特定服务CBUUID时找不到外围设备

时间:2012-06-26 21:30:56

标签: ios core-bluetooth

当我使用时:

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电源服务),但无济于事;扫描永远不会发现任何东西。

即使服务正在运行(我可以在连接时与他们进行通信),当我扫描时将服务UUID数组传递为nil并调用此委托方法...

-(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);
    }
}

...它总是报告“找到的服务:0”。我是否希望在扫描期间找到的服务中填充services数组? (我认为这至少部分可能,基于scanForPeripheralsWithServices:[NSArray arrayWithObject:uuid] options:nil。)

这可能是我周边服务广告的问题吗?我是否错误地使用了API?任何指导都非常感谢! : - )

PS:我非常环保蓝牙。

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

1 个答案:

答案 0 :(得分:2)

原来我们的外围代码没有宣传UUID la this Bluetooth spec

一旦我们将它们放入广告包中,iOS就毫不费力地捡起它们。