iBeacon的扫描响应能否被获取?

3

我正在使用iOS 8.4中的Core Bluetooth API。我的代码与一个被编程成iBeacon的BLE设备进行交互。以下是我的CBCentralManager协议didDiscoverPeripheral回调函数实现所产生的日志语句:

2015-09-04 16:23:08.231 CentralManager - 发现外围设备[CBPeripheral: 0x1742e0b80, identifier = 8B63C7F8-44D5-F3E2-AD40-2916A2513BA9, name = DfuTarg, state = disconnected],数据为[[kCBAdvDataIsConnectable: 0]]

该日志语句打印了函数的peripheral和advertisementData参数的值。请注意,外围设备的名称被打印出来(顺便说一句:我碰巧知道DfuTarg是被扫描设备的正确名称)。

iOS从哪里获取这个名称呢?它不是广播包的一部分。它必须来自于第二次扫描请求/响应交换,对吗?我的代码能否访问扫描响应呢?

1个回答

1
是的,CBPeripheral名称来自扫描响应。当检测到广告时,CoreBluetooth会自动请求扫描响应数据(至少在应用程序处于前台时)。
当设备接收到初始广告和扫描响应时,didDiscoverPeripheral方法将调用两者的信息。实际上,通过使用该回调方法,您已经可以访问扫描响应信息。
需要注意的重要事项是,在广告被识别为iBeacon时,您无法在此回调中访问原始制造商数据。iOS会将其剥离以便您无法访问。这适用于广告和扫描响应中存在的制造商数据字节。
有关更多信息,请参见此处

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接