13

次の BeaconLayout で Kontakt ビーコンを検出しようとしています。

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

しかし、私はそれを正しくしていないようです。広告パケットの構造は次のようになります。

ここに画像の説明を入力

前もって感謝します。

4

2 に答える 2

15

@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) {   }
}

上記のレイアウトとは異なるバージョンの 2.2 バージョンの Kontakt ビーコンを使用していることに注意してください。

于 2014-08-17T19:51:25.280 に答える
6

beconLayout に関するいくつかの問題:

  1. beaconLayout 文字列のバイト オフセットは製造元データ (表示されている表のバイト 6) で始まるため、すべてのオフセットから 6 を引く必要があります。

  2. この表は、ビーコンに識別子が 3 つしかないことを示していますが、beaconLayout 文字列には 4 つ含まれています。最初の識別子の長さは 16 バイトであることに注意してください。

動作するようになったら、使用した正しい beaconLayout を投稿してください。

于 2014-08-15T21:09:40.257 に答える