Я начиная маяки и моя цель состоит в обработке коллекции маяки в didRangeBeaconsInregion так, что я ближе всего один в коллекции и показать на экране строку, относящуюся к маяку itselt (beacon1 = красный , beacon2 = синий ...). Моя текущая рекламная ставка ibeacons составляет 1 Гц (и я не могу их настроить, чтобы увеличить ее).Altbeacon Android библиотека - didRangeBeaconsInRegion
Я попытался следующим:
public void onBeaconServiceConnect() {
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
Beacon closest = null;
double distance = 100.0;
logToDisplay(beacons.size() + " beacons in collection");
for (Beacon beacon : beacons) {
if (distance > beacon.getDistance()) {
closest = beacon;
distance = beacon.getDistance();
}
}
if (closest == null) {
logToDisplay(getCurrentTimeStamp() + " | Closest = null");
}
else if (closest.getId3().toInt() == 1) {
logToDisplay(getCurrentTimeStamp() + " | BLUE");
}
else if (closest.getId3().toInt() == 3) {
logToDisplay(getCurrentTimeStamp() + " | RED");
}
else if (closest.getId3().toInt() == 4) {
logToDisplay(getCurrentTimeStamp() + " | GREEN");
} // ... and so on with some more colours
}
});
try {
beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
} catch (RemoteException e) { }
}
Насколько я знаю, didRangeBeaconsinRegion имеет коллекцию маяков, которая является буфером радиомаяков видели в последней секунде. Вследствие того, что мои маяки имеют только показатель объявления 1 Гц, размер коллекции очень мал, и я не могу получить согласованные результаты.
Я думаю, что есть два решения:
- Увеличение скорости объявления (не возможно для меня пока).
- Увеличение периода 1 секунды от метода didRangeBeaconsinRegion, так что коллекция маяков буферизует маяки, видимые за последние 5 секунд (например).
Возможно ли это? Как мне это сделать? Есть ли этот набор с чем-то вроде beaconManager.setForegroundScanPeriod(5000l);
?
Он работает. Спасибо! Один вопрос по этому вопросу: я заметил, что размер сбора маяков равен числу различных обнаруженных маяков. Поэтому, если я обнаруживаю в 3 раза один и тот же маяк в пределах ForegroundScanPeriod (5 секунд), размер коллекции равен 1. Возможно ли, что все коллекции обнаружены (даже если они из одного и того же маяка) в коллекции, так что размер коллекции из Например, будет 3? –
Извините, это невозможно в текущем дизайне библиотеки. – davidgyoung