Altbeacon - 仅在IMMEDIATE范围内检测信标并丢弃此范围之外的任何信标

时间:2015-04-06 02:21:56

标签: android ibeacon altbeacon

我希望应用只能看到“立即”范围内的信标。在其中一篇文章中(我没有链接),我读到了诸如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();

一些提示对我来说是一种祝福。

1 个答案:

答案 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)
         }      
     }
}