如何让每次检测的所有iBeacon信息?

How to make all iBeacon information for each detection?

我在实验环境部署了9个iBeacons。使用以下方式检测区域 iBeacon:

public void onBeaconServiceConnect() {
    beaconManager.setRangeNotifier(new RangeNotifier() {
        @Override
        public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
            System.out.println("The number of iBeacons detected = "+beacons.size());
        }
    });
    try {
        beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
    } catch (RemoteException e) {
    }
}

输出者:

I/System.out: The number of iBeacons detected = 2
I/System.out: The number of iBeacons detected = 4
I/System.out: The number of iBeacons detected = 8
I/System.out: The number of iBeacons detected = 7
I/System.out: The number of iBeacons detected = 9
I/System.out: The number of iBeacons detected = 4
I/System.out: The number of iBeacons detected = 4
I/System.out: The number of iBeacons detected = 5
I/System.out: The number of iBeacons detected = 6
I/System.out: The number of iBeacons detected = 3
I/System.out: The number of iBeacons detected = 6
I/System.out: The number of iBeacons detected = 2
I/System.out: The number of iBeacons detected = 7
I/System.out: The number of iBeacons detected = 7

我确认每个iBeacon都正常运行。 每次检测如何制作所有iBeacon信息?

我怀疑您的信标广告不够频繁,无法进行可靠检测。

每个信标制造商都有不同的默认广告率 -- 发送数据包的频率。 iBeacon 标准需要 10 Hz(每秒 10 个数据包),但许多电池供电信标制造商将其降低到 1 Hz(每秒 1 个数据包)以节省电池。

问题是即使在最佳条件下也无法检测到 100% 的数据包,这也是 Apple 指定传输速率为每秒一次的正常测距速率的 10 倍以使检测可靠的原因之一。

要解决此问题,请执行以下两项操作之一:

  1. 如果可能,将您的信标配置为以 10 Hz 的频率进行广告。
  2. 将扫描周期更改为 10 秒以增加收集更多数据包的时间:beaconManager.setForegroundScanPeriod(10000);