Правильный макет для обнаружения маяка Kontakt на Android с помощью AltBeacon

Я пытаюсь обнаружить Kontakt Beacon со следующим BeaconLayout:

setBeaconLayout("m:8-9=0215,i:10-13,i:14-15,i:16-17,i:18-25"));

но я, кажется, не делаю это правильно. Структура рекламного пакета выглядит следующим образом:

enter image description here

Спасибо заранее.

Ответ 1

Благодаря комментариям @davidgyoung, я наконец обнаружил свой маяк Kontakt со следующим кодом:

public class MainActivity extends Activity implements BeaconConsumer {

protected static final String TAG = "RangingActivity";
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);        
    beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
    beaconManager.bind(this);    
}

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

            try {
                beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
            } catch (RemoteException e) {   }
}

Обратите внимание, что я использую маяк версии Kontakt версии 2.2, который отличается от размещенной выше версии.

Ответ 2

Несколько проблем с вашим beaconLayout:

  • Байт-смещения в строке beaconLayout начинаются с данных производителя (байт 6 в таблице, который вы показываете), поэтому вам нужно вычесть 6 из всех ваших смещений.

  • В таблице показано, что в маяке есть только три идентификатора, но ваша строка beaconLayout имеет четыре. Обратите внимание, что первый идентификатор длиной 16 байтов.

Если вы его заработаете, напишите правильный beaconLayout, который вы использовали.