Обновить или удалить маяки из списка - PullRequest
0 голосов
/ 24 марта 2019
public void onBeaconServiceConnect() {
    BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
    beaconManager.setRangeNotifier(new RangeNotifier() {
        @Override
        public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {

            List<Beacon> beaconList = new ArrayList<Beacon>(beacons);

            for (Beacon beacon : beacons) {


                Beacon.setHardwareEqualityEnforced(true);

                beaconList.add(beacon);

                if (beaconList.size() >= 2) {

                    if (beaconList.get(0).getBluetoothAddress().equals("20:91:48:4C:5A:34") && beaconList.get(1).getBluetoothAddress().equals("20:91:48:4C:5B:AF")) {

                        if (beaconList.get(0).getDistance() < beaconList.get(1).getDistance()) {

                            Log.i("MainActivity", "You're in room 1");

                        }


                    }

                    if (beaconList.get(1).getBluetoothAddress().equals("20:91:48:4C:5A:34") && beaconList.get(0).getBluetoothAddress().equals("20:91:48:4C:5B:AF")) {

                        if (beaconList.get(1).getDistance() < beaconList.get(0).getDistance()) {

                            Log.i("MainActivity", "You're in room 1");

                        }


                    }
                    if (beaconList.get(0).getBluetoothAddress().equals("20:91:48:4C:5B:AF") && beaconList.get(1).getBluetoothAddress().equals("20:91:48:4C:5A:34")) {

                        if (beaconList.get(0).getDistance() < beaconList.get(1).getDistance()) {

                            Log.i("MainActivity", "You're in room 2");

                        }
                    }


                    if (beaconList.get(1).getBluetoothAddress().equals("20:91:48:4C:5B:AF") && beaconList.get(0).getBluetoothAddress().equals("20:91:48:4C:5A:34")) {

                        if (beaconList.get(1).getDistance() < beaconList.get(0).getDistance()) {

                            Log.i("MainActivity", "You're in room 2");

                        }
                    }


                } else {
                    Log.i("MainActivity", "Less than 2 beacons detected");
                }

            }
        }
    });

Так что этот код на самом деле работает и работает, но всякий раз, когда я выхожу из региона с одного из маяков, размер списка остается равным 2, а else { Log.i("MainActivity", "Less than 2 beacons detected");

часть кода никогда не выполняется, как я могу удалять или обновлять маяки, когда они находятся вне диапазона, поэтому, когда в список добавляются 2 маяка, но один из маяков находится вне диапазона, менее 2 маяков обнаруженный будет напечатан.

1 Ответ

0 голосов
/ 24 марта 2019

Просто избавьтесь от цикла for. Вы уже добавляете все маяки в список при инициализации ArrayList.

Затем выведите блок if из цикла for и оставьте его сразу после инициализации списка.

Таким образом, когда список маяков становится равным нулю, блок if все еще выполняется ..

...