按距离触发信标
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;
}
}
}
}
正如@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;
}
}
}
}