Исключение при попытке добавить BeaconParser в AltBeacon lib

Я пытаюсь изменить ссылочное приложение из 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, который я нашел здесь .

Однако это бросает, поскольку lbp является java.util.Collections $ UnmodifiableRandomAccessList. Я новичок в Java, но я думаю, что это список, к которому я не могу добавить элементы, и что-то должно было измениться в библиотеке между решением во второй ссылке и теперь.

BeaconParser нибудь знает, что будет правильным способом добавить новый BeaconParser или то, что я делаю неправильно здесь?

Я уже ответил на ваш вопрос о GitHub, но я чувствовал, что должен ответить и здесь, чтобы помочь другим людям, столкнувшимся с этой проблемой.

Я проверил исходный код (v2.1.3), скорее всего, вы добавляете новый синтаксический анализатор после привязки маякового сервиса (который запрещает добавление дополнительного пользовательского макета).

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

Чтобы впоследствии добавить анализатор макета, вам необходимо отменить все сервисные соединения, которые также включают в себя все RegionBootsrap s. Если вы определили один, вам необходимо отключить его, так как он также устанавливает соединение с BeaconService .

Тем не менее, я считаю, что вам не нужно добавлять какие-либо пользовательские макеты позже. Если вы сохраняете свой макет на удаленном компьютере, вы должны сначала его загрузить, а затем связать BeaconManager .

BTW. Если вы считаете, что эта возможность должна быть добавлена ​​в библиотеку, вы можете создать запрос на странице GitHub библиотеки: AltBeacon GitHub