AltBeacon库仅首次显示信标,然后停止显示它们

时间:2019-03-20 06:12:51

标签: android ibeacon altbeacon

我正在使用altbeacon库来检测iBeacon。它在第一次扫描时显示所有信标,然后遗漏了一些信标。

这是我的情况:

  • 我有7个信标,首先扫描应用程序以检测所有信标。
  • 如果我再次尝试扫描信标,它将仅显示4。

我该如何解决?我在下面添加我的代码。

@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) { }
    }

1 个答案:

答案 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

标识符的顺序可能与一次运行不同,但是只要所有信标都在周围,标识符的列表通常应该相同。