AltBeacon getIdentifier returns 错误值

AltBeacon getIdentifier returns wrong value

我的代码或信标返回 "wrong" 值时出现问题(在引号中,因为这很可能是我的代码中的错误)。我一直在阅读信标,据我所知,我可以给我的信标 3 个标识符。我已将信标的标识符配置为 000000000000001234(很多 0,以 1234 结尾),0001 表示主要,0002 表示次要。

这是我在测距信标时使用的一些代码:

String id1 = beacon.getId1().toString(); 
String id2 = beacon.getId2().toString();
String id3 = beacon.getId3().toString();

我假设这些代表我在信标中的标识符,但我得到的 id1 值是“0x02676f6f2e67c...”,而 id2 和 id3 为空。我完全离开了吗?

也许我使用了错误的解析器? (我在信标客户支持的邮件中收到了这个,虽然我没有指定我想使用标识符)

.setBeaconLayout("s:0-1=feaa,m:2-2=10,p:3-3:-41,i:4-20v"));

我必须承认,我不太明白信标解析器是否取决于我想如何解码我的信标,或者我拥有哪种信标,甚至可能两者都有..

郑重声明,我使用的是 Android,但我认为这无关紧要。

几点:

  • 有几种流行的信标格式,每种格式都传输不同数量的标识符,标识符长度也不同。 AltBeacon 和 iBeacon 发送三个标识符,分别为 16、2 和 2 字节。 Eddystone-UID 发送两个标识符,分别为 10 字节和 6 字节。 Eddystone-URL 发送一个长度在 1-17 字节之间的可变标识符。

  • 问题没有说明传输的是什么信标格式。听起来像是 iBeacon 或 AltBeacon,因为这些格式具有三部分标识符(有时称为 ProximityUUID、major 和 minor)。但是这些格式的第一个标识符是一个 16 字节的 UUID,示例显示这样的标识符:000000000000001234,如果以十六进制显示,则可能是 9 个字节,或者如果以十进制表示,则字节数未知。

  • 显示的信标布局字符串 ("s:0-1=feaa,m:2-2=10,p:3-3:-41,i:4-20v") 适用于 Eddystone-URL,这是一种具有单个可变长度标识符的格式,可以转换为 URL 字符串使用自定义压缩算法。

  • 使用单个标识符(ID2 和 ID3 为空)检测到的信标可能是 Eddystone-URL 传输。 0x02676f6f2e67c...的部分显示ID1等同于“http://goo.g”...

  • 的URL

结论:

  • 检测到的信标可能不是您要检测的信标。

  • 您附近可能有多个传输信标,或者一个信标发出多种不同类型的传输,这就是您检测到 Eddystone-URL 信标的原因。

  • 您打算检测的信标传输可能不是 Eddystone-URL 格式,因此您可能需要一个不同的 BeaconParser。您需要先弄清楚格式,然后才能添加正确的 BeaconParser。