正如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."); } } } }
我不明白,如何识别范围的退出。请帮忙。
答案 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;
}
}
}
}