Android AltBeacon ранжирование

Я бы хотел просканировать любой маяк вокруг себя. В принципе, если я правильно понимаю, вам нужно знать их идентификатор, прежде чем сканировать их? Как бы вы сканировали любой маяк вокруг вас и извлекали их UUID / заводские идентификаторы и т. Д.?

Вот мой текущий код:

public class TestActivity extends Activity implements BeaconConsumer {

private BeaconManager beaconManager;

public static final String TAG = "TestActivity";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    startBeaconScan();
}

public void startBeaconScan() {
    beaconManager = BeaconManager.getInstanceForApplication(this);
    beaconManager.setDebug(true);
    beaconManager.bind(this);
    beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
    beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("s:0-1=feaa,m:2-2=00,p:3-3:-41,i:4-13,i:14-19"));
    beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("x,s:0-1=feaa,m:2-2=20,d:3-3,d:4-5,d:6-7,d:8-11,d:12-15"));
    beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("s:0-1=feaa,m:2-2=10,p:3-3:-41,i:4-20v"));
    beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
    beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
    beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
    beaconManager.setMonitorNotifier(new MonitorNotifier() {
        @Override
        public void didEnterRegion(final Region region) {
            Log.d(TAG, "ENTERED REGION: "+region);
        }

        @Override
        public void didExitRegion(Region region) {}

        @Override
        public void didDetermineStateForRegion(int i, Region region) {}
    });
    beaconManager.setRangeNotifier(new RangeNotifier() {
        @Override
        public void didRangeBeaconsInRegion(Collection<Beacon> collection, Region region) {
            Log.d(TAG, "BEACONS: "+collection.size());
        }
    });
}

@Override
public void onBeaconServiceConnect() {
    try {
        beaconManager.startMonitoringBeaconsInRegion(new Region("myRegion", null, null, null));
    } catch (RemoteException e) {
        e.printStackTrace();
    }
}

}

Я получаю эти сообщения на выходе, но больше ничего:

beacon detected : id1: f7826da5-4fa1-4e48-8024-bc5b70e0891a id2: 49089 id3: 34388

Итак, вопрос в том, как я могу обнаружить эти маяки, не зная заранее их идентификатор?


person breakline    schedule 01.02.2016    source источник


Ответы (1)


Два момента:

  1. Создание определения Region со всеми нулевыми идентификаторами - это, по сути, подстановочный знак, который будет соответствовать всем идентификаторам маяков, поэтому вам не нужно знать их заранее. В показанном коде это уже есть.

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

После этой строки:

beaconManager.startRangingBeaconsInRegion(new Region("myRegion", null, null, null));

Добавь это:

beaconManager.startMonitoringBeaconsInRegion(new Region("myRegion", null, null, null));
person davidgyoung    schedule 01.02.2016
comment
Часть startMonitoringBeaconsInRegion была в коде, вы имеете в виду, что я также должен добавить startRangingBeaconsInRegion? - person breakline; 01.02.2016