我是不等的信標,我的目標是處理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的廣告費率,集合規模非常小,我無法獲得一致的結果。
我認爲有兩種解決方案:
- 提高廣告率(我不可能還)。
- 從didRangeBeaconsinRegion方法中增加1秒時間,以便信標收集緩衝在最近5秒內(例如)看到的信標。
是否可以這樣做?我該怎麼做? 這是否設置了類似beaconManager.setForegroundScanPeriod(5000l);
的東西?
它的工作原理。謝謝!關於這一點的一個問題:我注意到信標收集大小等於不同的檢測信標的數量。因此,如果我在ForegroundScanPeriod(5秒)內檢測到3次相同的信標,則收集大小爲1.是否有可能在收集中包含所有檢測(即使它們來自同一個信標),以便收集例子會是3? – 2015-03-19 10:35:45
對不起,目前的庫設計是不可能的。 – davidgyoung 2015-03-19 13:17:48