按距离触发信标

Triggering beacons by distance

正如@davidgyoung 在 中所建议的,这是我的新问题。

我想围绕信标创建一个半径,以便进入和离开该区域。实际上通过距离检测信标。 当信标进入半径时,我知道如何检查。为了测试这一点,我使用了:

public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
    if (beacons.size() > 0) {
        for (Beacon beacon: beacons) {
          logToDisplay("Beacon "+beacon.toString()+" is about "+beacon.getDistance()+" meters away, with Rssi: "+beacon.getRssi());
          if (beacon.getDistance() < 5.0) {
              logToDisplay("Beacon "+ beacon.toString()+" I see a beacon that is less than 5 meters away.");
          }
        }
    }
}

我不明白,如何识别范围的出口。请帮忙。

您可能会使用的一种技术是:

  • 使用标志变量来指示您是在基于距离的邻近区域内部还是外部。调用标志mInsideZone.

  • 当检测到信标小于 5 米,并且应用程序尚未在区域内时,执行您的 "entry" 代码,并将标志设置为 true。在这种情况下,我们只是打印出 "Beacon became less than five meters away."

  • 当检测到信标 > 10 米时,应用程序已经在区域内,执行您的 "exit" 代码,并将标志设置为 false。

为什么按5米进,按10米出?因为距离估计会波动,并且当您处于中间位置时,您不希望它在 entry/exit 之间来回移动。您不必使用这些确切的数字,但您可能想要做类似的事情。

代码如下:

private boolean mInsideZone = false;
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
    if (beacons.size() > 0) {
        for (Beacon beacon: beacons) {
            logToDisplay("Beacon "+beacon.toString()+" is about "+beacon.getDistance()+" meters away, with Rssi: "+beacon.getRssi());
            if (beacon.getDistance() < 5.0 && mInsideZone == false) {
                logToDisplay("Beacon "+ beacon.toString()+" Just became less than 5 meters away.");
                mInsideZone = true;
            }
            if (beacon.getDistance() > 10.0 && mInsideZone == true) {
                logToDisplay("Beacon "+ beacon.toString()+" Just became over 10 meters away.");
                mInsideZone = false;
            }
        }
    }
}