Библиотека AltBeacon показывает маяки только первый раз, а затем перестает их показывать - PullRequest
0 голосов
/ 20 марта 2019

Я использую библиотеку 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 голосов
/ 20 марта 2019

Код в настоящее время распечатывает третий идентификатор первого увиденного маяка:

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);

** РЕДАКТИРОВАТЬ: ** Кроме того, следует понимать, что если вы посмотрите на маяк первый , когда вокруг несколько, он может не работать согласованно из-за неопределенного порядка детектирования. Вам действительно нужно просмотреть список всех обнаруженных идентификаторов радиобуев, поэтому используйте такой цикл:

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

Порядок идентификаторов может отличаться от одного прогона к следующему, но список идентификаторов, как правило, должен быть одинаковым до тех пор, пока все маяки остаются вокруг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...