信标 UUID 与 BeaconLayout
Beacon UUID vs BeaconLayout
我目前对信标的工作原理很感兴趣,但我对此有一些疑问。
对于iOS,我只看到有关Beacon UUID 的源代码。但是对于 Android,我只看到 "beacon layouts"。
它们一样吗?它们可以从一种格式转换为另一种格式吗?
假设我有这个 Beacon UUID:
636f3f8f-6491-4bee-95f7-d8cc64a863b5
是否可以获取信标布局?但更具体地说,什么是信标布局?
谢谢!
信标"layout"指的是信标格式,特别是如何将不同的字段编码为传输低功耗蓝牙广告数据包中的信息所需的字节。
Apple 等一些公司将其信标格式作为商业机密进行维护,因此不允许公开。 Android Beacon Library 等开源模块不能包含解码这些信标而不发布它们的方法。所以他们使用布局字符串,这是用户快速轻松地告诉图书馆解码该信标的一种方式。
这里有一个开源 AltBeacon 格式的例子,它不介意人们发布它:
m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25
这意味着匹配此布局的蓝牙 LE 信标传输可以是这样的encoded/decoded:
- 使用制造商广告数据包 (m),在字节位置 2 和 3 中有两个字节类型代码 0xbeac。
- 在字节 4-19 中有它的第一个标识符(ID1 相当于 iBeacon UUID)。
- 在字节 20-21 中有第二个标识符(ID2 相当于 iBeacon major)。
- 在字节 22-23 中有它的第三个标识符(ID3 相当于 iBeacon minor)。
- 布局的 "p" 和 "d" 部分指的是用于距离估计的 "power" 校准值和用于存储电池电量和其他制造商的 "data" 字段-具体信息。
还有其他几种流行的信标格式,如 iBeacon 和 Eddystone。它们有自己的布局字符串,与上面显示的非常相似。
虽然您不能互换使用不同的信标格式,但您可以在iOS 和Android 上使用所有这些信标格式。在 Android 上使用专有格式只是进行 Google 搜索以找到信标格式的正确布局字符串,然后像这样配置它:
BeaconManager.getBeaconParsers().add(
new BeaconParser().setBeaconLayout("<paste layout string here>"));
我目前对信标的工作原理很感兴趣,但我对此有一些疑问。 对于iOS,我只看到有关Beacon UUID 的源代码。但是对于 Android,我只看到 "beacon layouts"。
它们一样吗?它们可以从一种格式转换为另一种格式吗?
假设我有这个 Beacon UUID:
636f3f8f-6491-4bee-95f7-d8cc64a863b5
是否可以获取信标布局?但更具体地说,什么是信标布局?
谢谢!
信标"layout"指的是信标格式,特别是如何将不同的字段编码为传输低功耗蓝牙广告数据包中的信息所需的字节。
Apple 等一些公司将其信标格式作为商业机密进行维护,因此不允许公开。 Android Beacon Library 等开源模块不能包含解码这些信标而不发布它们的方法。所以他们使用布局字符串,这是用户快速轻松地告诉图书馆解码该信标的一种方式。
这里有一个开源 AltBeacon 格式的例子,它不介意人们发布它:
m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25
这意味着匹配此布局的蓝牙 LE 信标传输可以是这样的encoded/decoded:
- 使用制造商广告数据包 (m),在字节位置 2 和 3 中有两个字节类型代码 0xbeac。
- 在字节 4-19 中有它的第一个标识符(ID1 相当于 iBeacon UUID)。
- 在字节 20-21 中有第二个标识符(ID2 相当于 iBeacon major)。
- 在字节 22-23 中有它的第三个标识符(ID3 相当于 iBeacon minor)。
- 布局的 "p" 和 "d" 部分指的是用于距离估计的 "power" 校准值和用于存储电池电量和其他制造商的 "data" 字段-具体信息。
还有其他几种流行的信标格式,如 iBeacon 和 Eddystone。它们有自己的布局字符串,与上面显示的非常相似。
虽然您不能互换使用不同的信标格式,但您可以在iOS 和Android 上使用所有这些信标格式。在 Android 上使用专有格式只是进行 Google 搜索以找到信标格式的正确布局字符串,然后像这样配置它:
BeaconManager.getBeaconParsers().add(
new BeaconParser().setBeaconLayout("<paste layout string here>"));