如何为每次检测生成所有iBeacon信息?

时间:2018-06-28 06:40:40

标签: java android beacon altbeacon

我在实验环境中部署了9个iBeacon。通过以下方式检测区域性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信息?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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