我在实验环境中部署了9个iBeacons。通过以下方式检测区域 iBeacons:
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 倍以使检测可靠的原因之一。
要解决此问题,请执行以下两项操作之一:
- 配置信标, 如果可能, 以 10 Hz 播发.
- 将扫描周期更改为 10 秒以增加收集更多数据包的时间:
beaconManager.setForegroundScanPeriod(10000);