Я ранжирую маяки, и моя цель — обработать коллекцию маяков в didRangeBeaconsInregion, чтобы получить ближайший в коллекции и показать на экране строку, относящуюся к самому маяку (beacon1=red, beacon2= синий...). Моя текущая скорость рекламы ibeacons составляет 1 Гц (и я пока не могу настроить их, чтобы увеличить ее).
Я пробовал следующее:
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);
?