Android-библиотека Altbeacon — didRangeBeaconsInRegion

Я ранжирую маяки, и моя цель — обработать коллекцию маяков в 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. Увеличение рейтинга рекламы (пока не возможно для меня).
  2. Увеличение периода в 1 секунду в методе didRangeBeaconsinRegion, чтобы коллекция маяков буферизовала маяки, увиденные за последние 5 секунд (например).

Можно ли сделать это? Как мне это сделать? Это набор с чем-то вроде beaconManager.setForegroundScanPeriod(5000l);?


person Community    schedule 18.03.2015    source источник


Ответы (1)


Да, вы можете делать то, что говорите, и это должно помочь сделать результаты более последовательными.

Добавьте указанную вами строку сразу после того, как вы впервые получите экземпляр beaconManager: beaconManager.setForegroundScanPeriod(5000l);

person davidgyoung    schedule 19.03.2015
comment
Оно работает. Благодарю вас! Один вопрос по этому поводу: я заметил, что размер коллекции маяков равен количеству различных обнаруженных маяков. Итак, если я обнаружу 3 раза один и тот же маяк в течение ForegroundScanPeriod (5 секунд), размер коллекции будет равен 1. Возможно ли иметь в коллекции все обнаружения (даже если они из одного и того же маяка), чтобы размер коллекции из пример будет 3? - person ; 19.03.2015
comment
Извините, это невозможно с текущим дизайном библиотеки. - person davidgyoung; 19.03.2015