我正在使用altbeacon
库来检测iBeacon
。它在第一次扫描时显示所有信标,然后遗漏了一些信标。
这是我的情况:
我该如何解决?我在下面添加我的代码。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
backgroundPowerSaver = new BackgroundPowerSaver(this);
beaconManager.bind(this);
return START_STICKY;
}
@Override
public void onBeaconServiceConnect() {
RangeNotifier rangeNotifier = new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0)
{
Beacon firstBeacon = beacons.iterator().next();
String beaconID = String.valueOf(firstBeacon.getId3());
Log.v("beacons",""+beaconID);
}
}
};
try {
beaconManager.startRangingBeaconsInRegion(new Region("buuid", Identifier.parse(buuid), null, null));
beaconManager.addRangeNotifier(rangeNotifier);
}
catch (RemoteException e) { }
}
答案 0 :(得分:0)
该代码当前正在打印出看到的第一个信标的第三个标识符:
if (beacons.size() > 0) {
Beacon firstBeacon = beacons.iterator().next();
String beaconID = String.valueOf(firstBeacon.getId3());
Log.v("beacons",""+beaconID);
}
它不会打印出看到的信标数量。如果您希望它打印出看到的信标数量,请执行此操作。
Log.v("beacon count", ""+beacons.count);
**编辑:**另外,请理解,如果仅在周围有多个时查看 first 信标,由于检测顺序不确定,它可能无法始终如一地运行。您确实需要查看检测到的所有信标ID的列表,因此请使用如下循环:
Log.v("beacons", "Here are the beacons I see:");
for (Beacon beacon: beacons) {
String beaconID = String.valueOf(beacon.getId3());
Log.v("beacons","beacon id: "+beaconID);
}
上面将打印这样的列表:
Here are the beacons I see:
3
4
5
标识符的顺序可能与一次运行不同,但是只要所有信标都在周围,标识符的列表通常应该相同。