2015-04-06 49 views
1

我希望應用只在「立即」範圍內看到信標。在其中一篇文章中(我沒有鏈接),我讀了諸如Immediate/Near/Far之類的字符串與altbeacon或其他類似的字符,因此建議使用beacon.getDistance() < 0.5來實現遠程信標。但不幸的是我沒有任何線索如何實現。Altbeacon - 僅在IMMEDIATE範圍內檢測到信標,並丟棄此範圍以外的任何信息

我試着用一篇文章提出的以下代碼來找到最短距離的信標,但似乎無法正常工作(最有可能是因爲波動的rssi和通過將信標保持在相距很近的距離進行測試)知道爲什麼他們要min = Integer.MAX_VALUE ....但我期待ATLEAST一些結果)

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

術語immediate,near和far是在iOS中實現的任意距離範圍桶。我們將它們放在2.0 Android信標庫中,因爲這些術語很模糊,以米爲單位實現特定的距離桶非常容易。這裏是你如何做同等功能:

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