2015-03-18 126 views
1

我是不等的信标,我的目标是处理didRangeBeaconsInregion中的信标集合,这样我就可以获得集合中最接近的一个,并在屏幕上显示与信标itselt相关的字符串(beacon1 = red ,beacon2 =蓝色......)。我目前的ibeacons广告率是1Hz(我无法配置它们以增加它)。Altbeacon Android Library - 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有一个信标,收集这是在最后一秒看到的信标的缓冲区。由于我的信标只有1Hz的广告费率,集合规模非常小,我无法获得一致的结果。

我认为有两种解决方案:

  1. 提高广告率(我不可能还)。
  2. didRangeBeaconsinRegion方法中增加1秒时间,以便信标收集缓冲在最近5秒内(例如)看到的信标。

是否可以这样做?我该怎么做? 这是否设置了类似beaconManager.setForegroundScanPeriod(5000l);的东西?

回答

1

是的,你可以做你说的话,它应该有助于使结果更加一致。

添加你提到之后你第一次得到一个beaconManager实例行:beaconManager.setForegroundScanPeriod(5000l);

+0

它的工作原理。谢谢!关于这一点的一个问题:我注意到信标收集大小等于不同的检测信标的数量。因此,如果我在ForegroundScanPeriod(5秒)内检测到3次相同的信标,则收集大小为1.是否有可能在收集中包含所有检测(即使它们来自同一个信标),以便收集例子会是3? – 2015-03-19 10:35:45

+0

对不起,目前的库设计是不可能的。 – davidgyoung 2015-03-19 13:17:48