如何解码BLE广告数据

时间:2017-08-24 06:35:24

标签: ios objective-c bluetooth-lowenergy ibeacon core-bluetooth

扫描完BLE设备后,我调用以下方法:

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 

并收到以下广告数据:

{ kCBAdvDataManufacturerData = <ffff0215 cf6d4a0f .....  adf2f491 ... ... > }

如何解码数据并访问其信息?

2 个答案:

答案 0 :(得分:1)

您似乎期望这个广告包可以像iBeacon一样解码,但事实并非如此。注释中列出的完整字节为:

ff ff 02 15 e8 4a 40 af 7b 8d e8 8d 4a 7b 40 af af e8 4a 40 40 af 7b 8d c3

02 15是Apple的公司代码,但接下来的两个字节e8 4a与您将看到的iBeacon模式不一致。因此,没有理由认为信标标识符在该分组中被编码。

数据是什么意思?如果没有关于什么软件或硬件正在传输该数据包及其预期目的的更多信息,就不可能说出来。我们只能说它是一个制造商广告(类型为ff),并将自己报告为Apple设备。

如果您想弄清楚数据包的含义,您需要确定哪个应用程序或硬件制造商正在发布它,并从该实体中寻找文档。

答案 1 :(得分:0)

我的小代码片段:

-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
    // NSLog(@"%@", central);
    NSLog(@"%@", peripheral);
    //NSLog(@"%@", advertisementData);
    NSLog(@"%@", RSSI);

    // more details:
    NSString* name = [peripheral name]; // name in NULL in iOS 6
    NSLog(@"%@", name);

    for (NSString * key in advertisementData){
        NSLog(@"%@", advertisementData[key]);
    }


}