我正在使用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) { }
}
代码当前打印出第一个看到的信标的第三个标识符:
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);
**编辑:**另外,要明白如果你只看到周围有多个信标的第一个信标,由于检测的不确定顺序,它可能不会表现一致。您确实需要查看检测到的所有信标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
标识符的顺序可以从一个运行到下一个不同,但是标识符的列表通常应该是相同的,只要所有信标保持在周围。