如何创建 Eddystone URL 标识符?

How to create Eddystone URL Identifiers?

我正在使用 Android Beacon Library 的 2.5.1 版,新增了对 Eddystone 的支持。在创建具有给定 URL 的新区域以仅过滤具有该 URL 的信标时,我很挣扎。例如,我只想处理以 http://example.com

开头的信标

我正在使用的 BeaconParser 布局将(在我的例子中)固定长度的 Scheme+Host+TLD 设置为 Id1,并将路径设置为 Id2。

如何为 Eddystone URL 信标创建一个 Identifier

我想像这样创建一个新区域:

Identifier exampleIdentifier = Identifier.parse("http://example.com");
Region exampleRegion = new Region("Example Region", exampleIdentifier, null, null);

这显然是行不通的,因为解析器无法处理给定的 URL。这是不支持还是我完全走错了路?

对我有用的是首先将标识符转换为库可以理解的东西(即十六进制表示法),然后尝试解析它(.parse("0x123456..." )。但我不确定这是否是最好和最干净的方法去做。

Eddystone-URL 使用自定义压缩算法将人类可读的 URL 转换为传输的字节。 Android Beacon Library 包含一个实用程序 class 可以为您完成此 compression/decompression。

byte[] urlBytes = UrlBeaconUrlCompressor.compress("http://example.com")
Identifier identifier = Identifier.fromBytes(urlBytes, 0, urlBytes.length, false);

上面的第一行生成一个字节数组,可以使用第二行将其转换为标识符。请参阅 more information on working with URL beacons.

的库文档