Проблема с библиотекой AltBeacon

Я разрабатываю проект Android с AltBeacon, ссылаясь на этот код в GitHub — https://github.com/justinodwyer/Beacon-Scanner-and-Logger Но столкнулся со следующей проблемой в eclipse-

The BeaconManager is not bound to the service. Call beaconManager.bind(BeaconConsumer consumer) and wait for a callback to onBeaconServiceConnect()

Мой код выглядит следующим образом.

BeaconScannerApp app = (BeaconScannerApp)this.getApplication();
beaconManager = app.getBeaconManager();
beaconManager.getBeaconParsers().add(new BeaconParser()
.setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.bind(this);
region = new Region("myRangingUniqueId", null, null, null);
beaconManager.setRangeNotifier(new RangeNotifier() {
        @Override 
        public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
        if (beacons.size() > 0) {
        Iterator <Beacon> beaconIterator = beacons.iterator();
        while (beaconIterator.hasNext()) {
        Beacon beacon = beaconIterator.next();
        logBeaconData(beacon);
        }
        }
        }
       });

       try {
           beaconManager.startRangingBeaconsInRegion(region);
       } catch (RemoteException e) {   
        Log.v("TEST", e.getMessage());
       }

person Arun Neeraj    schedule 22.06.2015    source источник
comment
startRangingBeaconsInRegion следует вызывать в onBeaconServiceConnect().   -  person Carnal    schedule 22.06.2015
comment
Спасибо @Карнал. Работает отлично.   -  person Arun Neeraj    schedule 23.06.2015


Ответы (1)


Вся инициализация маяков должна производиться в OnBeaconServiceConnect(). У меня были проблемы с DidExitRegion() и DidEnterRegion(), и это было именно потому, что я не занимался инициализацией своих обработчиков BeaconManager в OnBeaconServiceConnect(). Вы также можете иногда делать это OnCreate, но у меня это не сработало. Это C#, но он действительно похож.

Вот пример, который хорошо работает:

public void OnBeaconServiceConnect()
    {

        beaconManager.SetForegroundScanPeriod(1000L);
        beaconManager.SetForegroundBetweenScanPeriod(10000L);

        rangeNotifier.DidRangeBeaconsInRegionComplete += RangeNotifier_DidRangeBeaconsInRegionComplete;
        monitorNotifier.EnterRegionComplete += MonitorNotifier_EnterRegionComplete;
        monitorNotifier.ExitRegionComplete += MonitorNotifier_ExitRegionComplete;

        beaconManager.SetRangeNotifier(rangeNotifier);
        beaconManager.SetMonitorNotifier(monitorNotifier);

        try
        {
            beaconManager.StartMonitoringBeaconsInRegion(region);
            beaconManager.StartRangingBeaconsInRegion(region);
        }catch(RemoteException e)
        {
            Log.Debug(TAG,e.ToString());
        }

    }
person ManuVR    schedule 28.01.2016