Исключение при попытке добавить 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;
}

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

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

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

Другие вопросы по тегам