2015-02-18 4 views
3

Я пытаюсь изменить reference app из AltBeacon, чтобы обнаружить iBeacons.Исключение при попытке добавить BeaconParser в AltBeacon lib

В 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 который я нашел here.

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

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

ответ

5

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

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

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

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

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

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

+2

В библиотечной версии 2.6 изменения парсеров радиомаяка теперь разрешен после начала сканирования – davidgyoung