我在实验环境中部署了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信息?
答案 0 :(得分:1)
我怀疑您的信标广告发布频率不够高,无法进行可靠的检测。
每个信标制造商都有不同的默认广告费率-发送数据包的频率。 iBeacon标准要求10 Hz(每秒10个数据包),但是许多电池供电信标制造商将其降低到1 Hz(每秒1个数据包)以节省电池。
问题在于即使在最佳条件下也不会100%地检测到数据包,这是Apple指定传输速率为正常每秒一次测距速率的10倍以确保检测可靠的原因之一。
要解决此问题,请执行以下两项操作之一:
beaconManager.setForegroundScanPeriod(10000);