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部分来接收 eddystone 信号,遗憾的是,我没有收到。但是如果我删除它,我可以收到 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

最近我一直在努力实现同样的目标,并在这里找到了解决方案。您还需要通过将 Beacon 置于 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
    }

}

另外不要忘记将您的信标置于EddystoneUID 模式,然后打开信标,以便您的应用程序可以检测到它。

于 2015-11-14T11:54:05.180 回答
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

截至 2015 年 11 月 15 日,参考应用程序中使用的 Android 信标库 2.6 版存在一个错误。该错误阻止了使用具有三个空标识符的默认区域规范检测 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 回答