我希望应用只能看到“立即”范围内的信标。在其中一篇文章中(我没有链接),我读到了诸如Immediate / Near / Far之类的字符串已经过时使用了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();
一些提示对我来说是一种祝福。
答案 0 :(得分:3)
术语“即时”,“近”和“远”是iOS中实现的任意距离范围存储桶。我们将它们放在2.0 Android Beacon Library中,因为条款含糊不清,以米为单位实现特定的距离桶非常容易。以下是您可以执行等效功能的方法:
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)
}
}
}