1

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

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

ответ

1

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

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

+0

Он работает. Спасибо! Один вопрос по этому вопросу: я заметил, что размер сбора маяков равен числу различных обнаруженных маяков. Поэтому, если я обнаруживаю в 3 раза один и тот же маяк в пределах ForegroundScanPeriod (5 секунд), размер коллекции равен 1. Возможно ли, что все коллекции обнаружены (даже если они из одного и того же маяка) в коллекции, так что размер коллекции из Например, будет 3? –

+0

Извините, это невозможно в текущем дизайне библиотеки. – davidgyoung