我使用CBCentralManager连接到BLE外设。它连接到这个广告数据:
["kCBAdvDataLocalName": name,
"kCBAdvDataIsConnectable": 1,
"kCBAdvDataServiceUUIDs": <__NSArrayM 0x600000c74de0>(
Generic Access Profile,
Generic Attribute Profile,
1803
),
"kCBAdvDataChannel": 37]
所以我调用peripheral.discoverServices(nil)
获得这3个服务,但是didDiscoverServices
只找到一个
[<CBService: 0x600001768040, isPrimary = NO, UUID = 1803>]
有谁能说清楚为什么是这样的吗?
您在广告中看到的三个服务中的两个是通用访问配置文件和通用属性配置文件。它们用于管理外设的发现以及服务和属性的发现。
当你请求外围设备、服务和特性发现时,核心蓝牙会使用这些服务。
您不能直接与它们交互,因此当您发现可用的服务时,它们不会报告给您的委托。
外设暴露的最后一个服务是链路丢失服务(0x1803
)。此服务确实具有您的中心可以与之交互的特性,因此当您发现服务时将返回此服务。