2015-03-18 128 views
1

我是不等的信標,我的目標是處理didRangeBeaconsInregion中的信標集合,這樣我就可以獲得集合中最接近的一個,並在屏幕上顯示與信標itselt相關的字符串(beacon1 = red ,beacon2 =藍色......)。我目前的ibeacons廣告率是1Hz(我無法配置它們以增加它)。Altbeacon Android Library - didRangeBeaconsInRegion

我曾嘗試以下:

public void onBeaconServiceConnect() { 
    beaconManager.setRangeNotifier(new RangeNotifier() { 
     @Override 
     public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { 

      Beacon closest = null; 
      double distance = 100.0; 
      logToDisplay(beacons.size() + " beacons in collection"); 

      for (Beacon beacon : beacons) { 

       if (distance > beacon.getDistance()) { 
        closest = beacon; 
        distance = beacon.getDistance(); 
       } 

      } 

      if (closest == null) { 
       logToDisplay(getCurrentTimeStamp() + " | Closest = null"); 
      } 
      else if (closest.getId3().toInt() == 1) { 
       logToDisplay(getCurrentTimeStamp() + " | BLUE"); 
      } 
      else if (closest.getId3().toInt() == 3) { 
       logToDisplay(getCurrentTimeStamp() + " | RED"); 
      } 
      else if (closest.getId3().toInt() == 4) { 
       logToDisplay(getCurrentTimeStamp() + " | GREEN"); 
      } // ... and so on with some more colours 

     } 

    }); 

    try { 
     beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null)); 
    } catch (RemoteException e) { } 
} 

據我所知,didRangeBeaconsinRegion有一個信標,收集這是在最後一秒看到的信標的緩衝區。由於我的信標只有1Hz的廣告費率,集合規模非常小,我無法獲得一致的結果。

我認爲有兩種解決方案:

  1. 提高廣告率(我不可能還)。
  2. didRangeBeaconsinRegion方法中增加1秒時間,以便信標收集緩衝在最近5秒內(例如)看到的信標。

是否可以這樣做?我該怎麼做? 這是否設置了類似beaconManager.setForegroundScanPeriod(5000l);的東西?

回答

1

是的,你可以做你說的話,它應該有助於使結果更加一致。

添加你提到之後你第一次得到一個beaconManager實例行:beaconManager.setForegroundScanPeriod(5000l);

+0

它的工作原理。謝謝!關於這一點的一個問題:我注意到信標收集大小等於不同的檢測信標的數量。因此,如果我在ForegroundScanPeriod(5秒)內檢測到3次相同的信標,則收集大小爲1.是否有可能在收集中包含所有檢測(即使它們來自同一個信標),以便收集例子會是3? – 2015-03-19 10:35:45

+0

對不起,目前的庫設計是不可能的。 – davidgyoung 2015-03-19 13:17:48