1

私のプロジェクトのhttps://github.com/AltBeacon/android-beacon-library-referenceを参照しています。

ドキュメントといくつかのコメントを通じて、デフォルトで altBeacon 信号を受信することがわかりました。Eddystone や iBeacon などの他のさまざまなビーコン形式を読み取るために、どのようにパーソナライズできるか知りたいと思いました。

オープンソースなので、それに固執し、後でそれに応じてパーソナライズ(更新)したいと思います。

たとえば、以下のコードを使用してビーコン レイアウトを設定する必要があります。

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"));

編集:回答で提案されているように、コードの setBeaconLayout 部分を変更しました。それでもうまくいきません。

次のコードを使用しました( https://github.com/AltBeacon/android-beacon-library-referenceを参照しています)。setBeaconLayout悲しいことに、受信していないエディストーン信号を受信する部分を追加しました。しかし、同じものを削除すると、altBeacon 信号を受信できます。

 public void onCreate() {
    super.onCreate();
    BeaconManager beaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this);
    beaconManager.getBeaconParsers().clear();
    beaconManager.getBeaconParsers().add(new BeaconParser().
    setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT)); //for Eddystone... 
    Log.d(TAG, "setting up background monitoring for beacons and power saving");
    Region region = new Region("backgroundRegion",null, null, null);
    regionBootstrap = new RegionBootstrap(this, region);
    backgroundPowerSaver = new BackgroundPowerSaver(this);
}

誰でもこれで私を助けることができますか?アプリに eddystone 信号を受信させるにはどうすればよいですか?

setBeaconLayoutPs誰かが異なる信号のサンプル部分のリストを与えることもできますか. その部分を変更するだけで、(レイアウトを設定した信号フォーマットの)信号を受信できると仮定しています。

よろしくお願いします。

4

3 に答える 3

0

2015 年 11 月 15 日の時点で、リファレンス アプリケーションで使用されている Android ビーコン ライブラリのバージョン 2.6 にバグがありました。このバグにより、3 つの null 識別子を持つデフォルトのリージョン仕様を使用した Eddystone ビーコンの検出が妨げられました。

そのバグは、ライブラリのバージョン 2.6.1 で修正されました。2015 年 11 月 16 日に、そのバグ修正を含むバージョン 2.7 を使用するようにリファレンス アプリケーションをアップグレードしました。

簡単な解決策は、参照アプリケーションの最新のコピーを使用するか、行を変更する必要があるコピーを変更することです。

compile 'org.altbeacon:android-beacon-library:2.6@aar'

compile 'org.altbeacon:android-beacon-library:2.7@aar'
于 2015-11-16T21:20:16.083 に答える
0

コードは私には良さそうです。ビーコンが実際に Eddystone-UID フレームを送信していることを確認してください。Google Play ストアから Beacon Locate アプリを試すことはできますか? これは同じライブラリに基づいており、質問に示されているものと同様のコード スニペットを使用しています。そのアプリを同様のコードで使用して、Eddystone-UID ビーコンを正常に検出します。

それが機能しない場合はmBeaconManager.setDebug(true)、次のような LogCat の出力を呼び出して貼り付けることにより、アプリで低レベルのデバッグを有効にしてください。

D/BeaconParser﹕ This is not a matching Beacon advertisement. (Was expecting be ac. The bytes I see are: 0201061aff4c0002153d9d4c66fb0f11e3ab64c82a143314d68079186cb61c09426c756542617220426561636f6e20383833333134453537383038000000

これにより、ビーコンが実際に送信しているバイトがわかるため、Eddystone-UID 形式であるかどうかを確認できます。

編集: この問題は、2015 年 11 月 15 日までリファレンス アプリにバンドルされていた Android ビーコン ライブラリのバージョンのバグのようです。詳細については、他の回答を参照してください。

于 2015-11-16T06:05:12.050 に答える
0

最近、私は同じことを達成するのに苦労していましたが、ここで解決策を得ました。また、ビーコンを Eddystone UUID モードにして設定する必要があります。を変更するだけでは、setBeaconLayout異なるビーコン形式を検出できません。たとえば、Eddystone UID 形式は iBeacon UID 形式と同じではありません。などを使用して、さまざまなビーコン形式を調べることができます mBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT));

したがって、コードは次のようになります。

public class MyApplication extends Application implements BootstrapNotifier {
private static final String TAG = "MyApplication";
private RegionBootstrap regionBootstrap;
private BackgroundPowerSaver backgroundPowerSaver;
private BeaconManager mBeaconManager;

public void onCreate() {
    super.onCreate();
    mBeaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this);
    mBeaconManager.getBeaconParsers().clear();
     mBeaconManager.getBeaconParsers().add(new BeaconParser().
        setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT));
    Region region = new Region("my-beacon-region", null, null, null);

    regionBootstrap = new RegionBootstrap(this, region);

    backgroundPowerSaver = new BackgroundPowerSaver(this);
}

@Override
public void didEnterRegion(Region region) {

        Log.d("radbeacon", "Beacon detected in region");
}

@Override
public void didExitRegion(Region region) {

    Log.d("radbeacon", "Beacon out of region");
}

@Override
public void didDetermineStateForRegion(int i, Region region) {
      //Ignore
    }

}

Eddystoneまた、ビーコンをUID モードにしてから、アプリで検出できるようにビーコンをオンにすることも忘れないでください。

于 2015-11-14T11:54:05.180 に答える