iOS iBeacon:如何以编程方式获取所有proximityUUID?

evrscar2  于 2023-06-07  发布在  iOS
关注(0)|答案(3)|浏览(137)

我想以编程方式查看广告包的所有proximityUUID。有些文章说,这在iOS上是不可能的,但Android是可能的。但我不敢相信,因为我发现奇妙的应用程序“BLExplr”有这个功能。我需要在我的应用程序中实现该功能。有没有人知道怎么做或者有好的例子?任何帮助将不胜感激。
(更新2014/1/17)
我相信@davidgyoung的回答是正确的。Estimote beacon的proximityUUID是“B 9407 F30-F5 F8 - 466 E-AFF 9 - 25556 B57 FE 6D”,但在BLExplr应用程序上显示的Estimote beacon的UUID是另一个ID。

zzoitvuj

zzoitvuj1#

不幸的是,你不能在iOS上这样做。当你说BLExplr和LightBlue可以做到这一点时,你将蓝牙服务UUID与iBeacon Proximity UUID混淆了。这是两件完全不同的事情。
蓝牙服务UUID对iOS可见,但与iBeacon的标识符无关,并且对于使用iBeacon毫无用处。服务UUID由iOS在每次看到蓝牙设备时生成,并且仅在蓝牙设备处于范围内的持续时间内保持不变。如果您将蓝牙设备带走,然后再将其带回来,它将具有不同的服务UUID。
iBeacon的标识符(ProximityUUID、Major、Minor)嵌入在蓝牙通告的主体内。iOS设备上的问题是,苹果的CoreBluetooth API不允许访问原始广告正文,因此没有第三方应用程序能够读取这些标识符。Apple只允许使用特殊的iBeacon CoreLocation API访问这些标识符,但这些API要求您预先知道Proximity UUID。
对不起,我知道这不是你想听到的答案!(我也很抱歉!)值得一提的是,你可以在Android、MacOS、Linux和Windows上做到这一点。
查看详情here

2g32fytz

2g32fytz2#

  • davidgyoung* 是部分错误的不能得到iBeacon信息.你实际上***可以***在OS X上获得接近UUID,但不是iOS

在一个CBPeripheraladvertisingData中,应该有一个名为kCBAdvDataManufacturerData的键;它是一个NSData,代表iBeacon广告信息。此密钥仅在OS X上可用
检查第2个字节是否等于0x02,前两个字节是否等于0x004c(十进制为76),第4个字节(十进制)+ 4是否等于数据长度(应为25)。
NSranges(抱歉Mac语法)
接近UUID:NSMakeRange(4, 16)
主要:NSMakeRange(20,2)
次要:NSMakeRange(22,2)
为了确保正确,您可以将值记录为十六进制(使用格式字符串%x),并确保它们与NSDatadescription匹配。

gwbalxhn

gwbalxhn3#

NSRange uuidRange = NSMakeRange(4, 16);
NSRange majorRange = NSMakeRange(20, 2);
NSRange minorRange = NSMakeRange(22, 2);
NSRange powerRange = NSMakeRange(24, 1);

Byte uuidBytes[16];
[data getBytes:&uuidBytes range:uuidRange];
NSUUID *uuid = [[NSUUID alloc] initWithUUIDBytes:uuidBytes];

int16_t majorBytes;
[data getBytes:&majorBytes range:majorRange];
int16_t majorBytesBig = (majorBytes >> 8) | (majorBytes << 8);

int16_t minorBytes;
[data getBytes:&minorBytes range:minorRange];
int16_t minorBytesBig = (minorBytes >> 8) | (minorBytes << 8);

int8_t powerByte;
[data getBytes:&powerByte range:powerRange];


return @{ @"uuid" : uuid,
          @"major" : @(majorBytesBig),
          @"minor" : @(minorBytesBig),
          @"power" : @(powerByte)
          };

但uuid是DeviceUUID,而不是ProximityUUID

相关问题