Altbeacon Android 库 - didRangeBeaconsInRegion
Altbeacon Android Library - didRangeBeaconsInRegion
我正在测距信标,我的目标是处理 didRangeBeaconsInregion 中的信标集合,以便获得集合中最接近的信标并在屏幕上显示与信标相关的字符串它本身(beacon1=红色,beacon2=蓝色...)。我目前的 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 有一个信标集合,它是最后一秒看到的信标的缓冲区。由于我的信标只有 1Hz 的广告率,集合大小非常小,我无法获得一致的结果。
我认为有两种解决方法:
- 提高广告率(我还做不到)。
- 从 didRangeBeaconsinRegion 方法增加 1 秒周期,以便信标收集缓冲最近 5 秒内看到的信标(例如)。
这可以吗?我该怎么做?
这个集合是不是有类似 beaconManager.setForegroundScanPeriod(5000l);
的东西?
是的,说到做到,这应该有助于使结果更加一致。
在您第一次获得 beaconManager
实例后立即添加您提到的行:beaconManager.setForegroundScanPeriod(5000l);
我正在测距信标,我的目标是处理 didRangeBeaconsInregion 中的信标集合,以便获得集合中最接近的信标并在屏幕上显示与信标相关的字符串它本身(beacon1=红色,beacon2=蓝色...)。我目前的 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 有一个信标集合,它是最后一秒看到的信标的缓冲区。由于我的信标只有 1Hz 的广告率,集合大小非常小,我无法获得一致的结果。
我认为有两种解决方法:
- 提高广告率(我还做不到)。
- 从 didRangeBeaconsinRegion 方法增加 1 秒周期,以便信标收集缓冲最近 5 秒内看到的信标(例如)。
这可以吗?我该怎么做?
这个集合是不是有类似 beaconManager.setForegroundScanPeriod(5000l);
的东西?
是的,说到做到,这应该有助于使结果更加一致。
在您第一次获得 beaconManager
实例后立即添加您提到的行:beaconManager.setForegroundScanPeriod(5000l);