2

私はビーコンの範囲を設定しています。私の目標は、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つの解決策があると思います:

  1. 広告率の増加 (まだ私には不可能です)。
  2. ビーコン コレクションが最後の 5 秒間に検出されたビーコンをバッファリングするように、 didRangeBeaconsinRegionメソッドから 1 秒の期間を増やします (たとえば)。

これを行うことは可能ですか?どうすればいいですか?これは次のようなもので設定されていbeaconManager.setForegroundScanPeriod(5000l);ますか?

4

1 に答える 1

2

はい、あなたはあなたが言うことをすることができます、そしてそれは結果をより一貫させるのに役立つはずです.

beaconManager最初にインスタンスを取得した直後に、言及した行を追加します。beaconManager.setForegroundScanPeriod(5000l);

于 2015-03-19T00:42:16.963 に答える