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

Posted

技术标签:

【中文标题】扫描特定服务 CBUUID 时找不到外围设备【英文标题】:Cannot find peripheral when scanning for specific service CBUUID 【发布时间】:2012-06-26 21:30:56 【问题描述】:

当我使用时:

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】:

原来我们的外围代码没有像 this Bluetooth spec 那样宣传 UUID。

我们将它们放入广告包后,ios 便毫不费力地捡起它们。

【讨论】:

你能展示你的cc2540代码吗?我有同样的问题,我认为我的广告一定是错误的。 是的,我也有同样的问题,你能发布你的代码吗? 代码早已不复存在;我们转向了 Bluegiga 的硬件和脚本语言,它使用起来要简单得多。然而,IIRC,CC2540 代码是一个硬编码的字节数组,编码为规范,并提供给一些将启动广告的 C 函数。

以上是关于扫描特定服务 CBUUID 时找不到外围设备的主要内容,如果未能解决你的问题,请参考以下文章

扫描提供特定服务的外围设备,但在发现的外围设备上找不到服务

当我使用我的 Android 设备作为使用 AltBeacon 的 ibeacon 时找不到 CoreBluetooth

找不到源类型的查询模式的实现:反序列化服务响应时找不到选择

Corebluetooth - 扫描特定 CBUUID 不起作用

在物理设备上运行时找不到 -lBugsnagReactNative 的库

使用 GWT 时找不到 Firebase Service Worker(404 错误)