Altbeacon Android库 - didRangeBeaconsInRegion

时间:2015-03-18 22:31:53

标签: android ibeacon ibeacon-android altbeacon android-ibeacon

我正在测量信标,我的目标是处理 didRangeBeaconsInregion 中的信标集合,以便我在集合中获得最接近的一个并在屏幕上显示与信标itselt相关的字符串(beacon1 = red ,beacon2 =蓝色......)。我目前的ibeacons广告费用是1Hz(我无法配置它们来增加它)。

我尝试了以下内容:

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秒内看到的信标(例如)。
  3. 有可能这样做吗?我该怎么做? 这是否设置为beaconManager.setForegroundScanPeriod(5000l);

1 个答案:

答案 0 :(得分:1)

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

在您第一次获得beaconManager个实例后立即添加您提及的行:beaconManager.setForegroundScanPeriod(5000l);