私はビーコンの範囲を設定しています。私の目標は、didRangeBeaconsInregionのビーコン コレクションを処理して、コレクション内で最も近いものを取得し、ビーコン自体に関連する文字列を画面に表示することです (beacon1=red、beacon2=blue...)。私の現在の ibeacons アドバタイジング レートは 1Hz です (これを増やすように設定することはまだできません)。
私は次のことを試しました:
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には、最後の 1 秒間に見られたビーコンのバッファであるビーコン コレクションがあります。ビーコンの広告レートが 1 Hz しかないため、コレクションのサイズが非常に小さく、一貫した結果が得られません。
私は2つの解決策があると思います:
- 広告率の増加 (まだ私には不可能です)。
- ビーコン コレクションが最後の 5 秒間に検出されたビーコンをバッファリングするように、 didRangeBeaconsinRegionメソッドから 1 秒の期間を増やします (たとえば)。
これを行うことは可能ですか?どうすればいいですか?これは次のようなもので設定されていbeaconManager.setForegroundScanPeriod(5000l);
ますか?