按距离触发信标

时间:2015-07-28 15:18:22

标签: android ibeacon-android altbeacon

正如Detect beacons exited a range中提到的@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.");
          }
        }
    }
}

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

1 个答案:

答案 0 :(得分:1)

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

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

  • 当检测到信标为&lt; 5米,应用程序尚未进入区域内,执行您的&#34;条目&#34;代码,并将标志设置为true。在这种情况下,我们只打印出#34; Beacon距离不到五米远。&#34;

  • 当检测到信标> 10米,应用程序已经在区域内,执行你的&#34;退出&#34;代码,并将标志设置为false。

为什么输入基于5米,出口基于10米?因为距离估计会波动,所以当你在中间的某个地方时,你不希望它在进入/退出之间来回走动。您不必使用这些确切的数字,但您可能想要做类似的事情。

以下是代码:

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;
            }
        }
    }
}