97

我已使用以下信标布局成功修改了Android 信标库的参考实现应用程序,以便它检测到我手头的 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 规范?

参考:

4

2 回答 2

67

这对我有用:“m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24”

我认为您不需要匹配 4c00 部分,因为那是制造商 ID,因此您可以将其关闭并从 m:2-3=0215 开始,其他一切看起来都正确,而且似乎有效。

于 2014-07-31T02:20:18.810 回答
5

您可以下载iBeacon 规范(单击“下载艺术品和规范”)。

在当前版本中,公司 ID必须0x4C00,信标类型必须是0x0215。所有其他字段都是必需的,并且如您指定的那样。

所以是的,你是完全正确的,它会检测到所有兼容的 iBeacon。

OT:它还规定广告间隔必须为 100 毫秒,但我严重怀疑所有 iBeacons 都坚持这一点。

于 2015-11-03T16:02:44.907 回答