尝试将BeaconParser添加到AltBeacon lib时出现exception

我一直试图从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 lbp = beaconManager.getBeaconParsers(); lbp.add(bp); beaconManager.bind(this); } 

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

但是这会抛出,因为lbp是java.util.Collections $ UnmodifiableRandomAccessList。 我是Java的新手,但我想这是一个我无法添加项目的列表,并且在第二个链接和现在的解决方案之间的库中必须更改某些内容。

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

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

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

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

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

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

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

Interesting Posts