Исключение при попытке добавить 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
или что я тут не так делаю?
1 ответ
Я уже ответил на ваш вопрос о GitHub, но я чувствовал, что должен ответить и здесь, чтобы помочь другим людям, которые сталкиваются с этой проблемой.
Я проверил исходный код (v2.1.3), скорее всего, вы добавляете новый парсер после привязки сервиса маяка (который запрещает добавление в будущем пользовательских макетов).
public List<BeaconParser> getBeaconParsers() {
if (isAnyConsumerBound()) {
return Collections.unmodifiableList(beaconParsers);
}
return beaconParsers;
}
Чтобы потом добавить какой-либо парсер компоновки, вам нужно отменить привязку всех сервисных соединений, которые также включают все RegionBootsrap
s. Если вы определили один, вам нужно отключить его, так как он также устанавливает соединение с BeaconService
,
Тем не менее, я считаю, что вам не нужно добавлять какой-либо пользовательский макет позже. Если вы храните свой макет в удаленном режиме, вы должны сначала получить их, а затем связать BeaconManager
,
Кстати, если вы считаете, что эта возможность должна быть добавлена в библиотеку, вы можете создать запрос на странице библиотеки GitHub: AltBeacon GitHub