在 iOS 中读取 Beacon 制造数据的最佳方式

Posted

技术标签:

【中文标题】在 iOS 中读取 Beacon 制造数据的最佳方式【英文标题】:Best way to read Beacon Manufacture Data in iOS 【发布时间】:2015-04-26 05:43:51 【问题描述】:

我正在尝试读取下图中的信标(BLE 设备)制造数据

我得到的回应是,

我的代码是,

id manufactureData = [advertisementData objectOrNilForKey:@"kCBAdvDataManufacturerData"];
        if ([manufactureData isKindOfClass:[NSData class]]) 
            int8_t measuredPower = 0;
            NSUInteger dataLength = [manufactureData length];
            for (int i = 0; i < dataLength; i++) 
                NSRange powerRange = NSMakeRange(i, 1);
                [manufactureData getBytes:&measuredPower range:powerRange];
                NSLog(@"index :%@ info :%hhd", [NSString stringWithFormat:@"%d", i+1],measuredPower);
            
        

这是读取制造数据的正确方法吗,我正在尝试读取电池地址值。我必须展示。

【问题讨论】:

我也只在 kCBAdvDataManufacturerData = 中得到这样的代码; ...那么如何从中获取数据? 【参考方案1】:

这是读取返回的NSData的正确方法。

鉴于此,您的信息返回 32 的电池值,这似乎正确吗?

如果不是,您能否确定您的制造商设备是小端还是大端? Link to explanation here 如果你不知道那是什么意思。

字节序问题的简短版本是,如果您的信息来自大字节序处理器,那么您的NSData 将向后。让你的电池价值 77

一个简短的说明:这听起来不像是 iBeacon 实现。 iBeacons 与支持 BLE 的设备不同。这很可能是支持 BLE 的设备,而不是 iBeacon。

【讨论】:

感谢您的回复!是的,它不是 ibeacon。它是一个 Beacon,但在 android 中,我们可以通过执行此操作来检索数据 (scanData[maxLength-1] & 0x0f) * 10 + (scanData[maxLength] & 0x0f); 我假设您在 android 设备上收到的值与您的 ios 设备不同? 在 Android Beacon 中给我们的数据长度为 30,我们手动通过与地址比较逐块读取。 我不确定您是否在 Android 设备上正确读取数据,但请查看您在屏幕截图中为“kCBAdvDataManufacturerData”提供的信息,以及您在 Obj-C 上的读取方式边。这是有效的。你知道你的字节序在设备上是大还是小?您期望您提供的信息中的温度值是多少? (你真的知道你的温度值是多少,所以我们可以在你正确找到它时确认)

以上是关于在 iOS 中读取 Beacon 制造数据的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 8 Beacon 中未检测到

Beacon / IOS CLLocationManager 获取当前区域

iOS / Beacon:重置 didEnterRegion 可能吗?

从 HealthKit 读取锻炼数据的最佳方法

从 HealthKit 读取锻炼数据的最佳方法

有关802.11的Beacon帧