3

我一直在尝试从 AltBeacon 修改参考应用程序以检测 iBeacons。

在 RangingActivity 中,我替换了

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ranging);
    beaconManager.bind(this);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ranging);
    BeaconParser bp = new BeaconParser();
    bp.setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24");
    List<BeaconParser> lbp = beaconManager.getBeaconParsers();
    lbp.add(bp);

    beaconManager.bind(this);
}

为了应用修改来检测我在这里找到的 iBeacon 。

然而,这就像lbpjava.util.Collections$UnmodifiableRandomAccessList 一样抛出。我是 Java 新手,但我想这是一个我无法向其中添加项目的列表,并且在第二个链接中的解决方案和现在之间的库中必须发生某些变化。

有谁知道添加新的正确方法是BeaconParser什么或我在这里做错了什么?

4

1 回答 1

5

我已经在 GitHub 上回答了你的问题,但我觉得我也应该在这里回答以帮助其他面临这个问题的人。

我检查了源代码(v2.1.3),很可能您在绑定信标服务后添加了新的解析器(禁止将来添加自定义布局)。

public List<BeaconParser> getBeaconParsers() {
    if (isAnyConsumerBound()) {
        return Collections.unmodifiableList(beaconParsers);
    }
    return beaconParsers;
}

为了在之后添加任何布局解析器,您需要取消绑定所有服务连接,其中也包括所有RegionBootsraps。如果您定义了一个,则需要禁用它,因为它还与BeaconService.

但是,我相信您以后不需要添加任何自定义布局。如果您将布局存储在远程,您应该首先获取它们然后绑定BeaconManager

顺便说一句,如果您认为应该将此功能添加到库中,您可以在库的 GitHub 页面上创建请求: AltBeacon GitHub

于 2015-02-22T20:02:59.633 回答