在 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 =这是读取返回的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 制造数据的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章
Beacon / IOS CLLocationManager 获取当前区域