这是使用AltBeacon的Android Beacon Library检测iBeacons的正确布局吗?

100

我已经成功地使用以下的信标布局修改了Android Beacon Library参考实现应用程序, 使它能够检测到我手头上的iBeacon设备:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
        beaconManager.getBeaconParsers().add(new BeaconParser().
               setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
        beaconManager.bind(this);
    }
}

作为对BLE数据包内部的新手,我不确定这是否是正确的布局。该库支持AltBeacon标准,其文档未提及如何检测iBeacon设备。

  • 这段代码是否能检测到所有 iBeacon 设备?即,m: 前缀是否太严格限制了,还是这是与 iBeacon 规范匹配的正确字节序列?
  • 同样地,剩下的布局是否完全符合 iBeacon 规范?

参考文献:


参考应用现在已经停止运行。 - BlueTrin
1
@BlueTrin 谢谢,已经更新了新存储库的链接。 - ento
2个回答

70

这对我行得通:"m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"

我认为你不需要匹配4c00部分,因为那是制造商ID,所以你可以把它省略掉,直接从m:2-3=0215开始。其他的看起来没问题,而且好像能用。


8
谢谢!通过使用Estimote信标进行测试,我可以确认'm:2-3 = 0215'更改确实是必要的。 - matiash
9
这个方法对我也有效..我使用了以下代码:beaconManager.getBeaconParsers().add(new BeaconParser(). setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")); - John
2
你如何读取那个布局?M、I和P是什么?我有一个从中国购买的开箱即用信标。通过使用蓝牙LE扫描器应用程序,我能够找到信标的UUID、major和minor。但是,我该如何找到UUID模式并将其放入“setBeaconLayout”中呢? - emen
3
请参考这个链接:https://dev59.com/il8e5IYBdhLWcg3w0dNJ。其中,m:制造商数据,i:接近度UUID,i:主要编号,i:次要编号,p:信号强度,d:电池电量。它们代表了字节偏移量(计数时需要加6)。例如:制造商ID在字符串“m:2-3 = 0215,i:4-19,i:20-21,i:22-23,p:24-24”中的第8和第9位之间。 - trueblue
4
有没有一种方法可以扫描周围的所有信标,不管它是Estimote还是其他类型的? - N Jay
显示剩余4条评论

5
您可以下载iBeacon规范(点击“下载艺术品和规格”)。
在当前版本中,公司ID必须为0x4C00,信标类型必须为0x0215。所有其他字段都是必需的,并且如您所指定的那样。
所以,是的,您是完全正确的,它将检测到所有符合规范的iBeacons。
OT:它还指定广告间隔必须为100ms,但我严重怀疑是否所有iBeacons都遵循这一点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接