Библиотека Beacon для Android от AltBeacon получает основные, второстепенные и UUID

Первое, что я хотел бы сказать, это то, что я впервые использую маяки. Я использую библиотеку AltBeacon

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

Это мой код:

public class Hello extends Activity implements BeaconConsumer {

    protected static final String TAG = "readme";
    private BeaconManager beaconManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hola);


        beaconManager = BeaconManager.getInstanceForApplication(this);

        beaconManager.getBeaconParsers().add(new BeaconParser().
                setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
        beaconManager.bind(this);

    }

    @Override
    public void onBeaconServiceConnect() {

        try {
            beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", Identifier.parse("MY_UUID"), Identifier.parse("1"), null));

        } catch (RemoteException e) {
        }

        beaconManager.setRangeNotifier(new RangeNotifier() {
            @Override
            public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
                if (beacons.size() > 0) {
                    Log.i(TAG, "The first beacon I see is about " + beacons.iterator().next().getDistance() + " meters away.");


                    Log.i(TAG, "Reading…"+"\n"+"proximityUuid:"+" "+ beacons.iterator().next().getId1()+"\n"+
                                    "major:"+" "+beacons.iterator().next().getId2()+"\n"+
                                    "minor:"+" "+beacons.iterator().next().getId3());}

            }
        });


        beaconManager.setMonitorNotifier(new MonitorNotifier() {

            @Override
            public void didEnterRegion(Region region) {
                Log.i(TAG, "I just saw an beacon for the first time!");
            }

            @Override
            public void didExitRegion(Region region) {
                Log.i(TAG, "I no longer see an beacon");
            }

            @Override
            public void didDetermineStateForRegion(int state, Region region) {
                Log.i(TAG, "I have just switched from seeing/not seeing beacons: " + state);
            }
        });

        try {
            beaconManager.startMonitoringBeaconsInRegion(new Region("myMonitoringUniqueId", null, null, null));

        } catch (RemoteException e) {
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        beaconManager.unbind(this);
    }
}

Как я уже сказал, я получаю UUID, основной и второстепенный, но я использую

beaconManager.setRangeNotifier (new RangeNotifier () {...

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

Это подходящее место для получения UUID, основного и второстепенного? Пробовал получить при въезде в регион:

 @Override
            public void didEnterRegion(Region region) {
                Log.i(TAG, "I just saw an beacon for the first time!");
            }

… Но безуспешно.

Я искал много информации, но не могу найти ничего конкретного. Я намерен создать переменную, содержащую UUID, другую, содержащую основную, а другую - второстепенную. Верно?

Если это неправильный путь, то что? Это правильно, как я сейчас?

Я очень благодарен за любую помощь и упомянул @davidgyoung… Надеюсь, что не беспокою.

Привет.


person Sergio76    schedule 13.06.2015    source источник


Ответы (1)


Да, использование RangeNotifier для чтения идентификаторов радиобуев - правильный подход.

Причина, по которой вы не можете получить идентификаторы в обратном вызове для MonitorNotifier, заключается в том, что обратный вызов передает вам только объект Region, в регион которого вы вошли / вышли. Этот регион может содержать подстановочные знаки для некоторых идентификаторов, поэтому обычно он не расскажет вам все о обнаруженных маяках. Для некоторых случаев использования в этом нет необходимости.

Суть в том, что если вы хотите прочитать все идентификаторы, вы делаете правильные вещи, используя API ранжирования и RangeNotifier.

person davidgyoung    schedule 14.06.2015