我希望应用程序只看到"立即"范围内的信标。在其中一篇文章中(我没有链接),我读到像立即/近/远这样的字符串在altbeacon中已经过时了,或者建议使用beacon.getDistance() < 0.5
作为立即测距信标。但不幸的是,我不知道如何实现这一点。
我尝试了一篇文章提出的以下代码,以在最短距离找到信标,但似乎无法正常工作(很可能是因为rssi波动和通过将信标保持在短距离进行测试…不知道他们为什么想要min = Integer.MAX_VALUE
…但我至少期待一些结果)
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
Object[] beaconArray = beacons.toArray();
//find the beacon with shortest distance
int count=-1; //when no beacon is there
int min = Integer.MAX_VALUE;
for (int i=0; i < beaconArray.length; i++){
int d=((Beacon)beaconArray[i]).getRssi();
if(d < min){
min=d;
count=i; //1st beacon in the array
}
}
//play with the beacon at the shortest distance
uuid = ((Beacon)beaconArray[count]).getId1().toString();
一些提示对我来说将是一件幸事。
术语immediate、near和far是iOS中实现的任意距离范围桶。我们把它们放在2.0安卓信标库中,因为这些术语很模糊,而且用米来实现特定的距离桶非常容易。以下是如何实现等效功能:
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
for (Beacon beacon: beacons) {
if (beacon.getDistance() < 0.5) {
// This beacon is immediate (< 0.5 meters)
}
else if(beacon.getDistance() < 3.0) {
// This beacon is near (0.5 to 3 meters)
}
else {
// This beacon is far (> 3 meters)
}
}
}