如何让 make android app 检测到 Eddystone 信号?
How to make make android app detect Eddystone signal?
我指的是 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 信号?
P.s 有人还可以给出不同信号的样本 setBeaconLayout
部分列表吗?我假设如果我们只改变那部分,我们就可以接收信号(对于我们设置布局的信号格式。
非常感谢。
最近我也在努力实现同样的目标,并找到了解决方案 。
您还需要通过将信标置于 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 模式,然后打开信标,以便您的应用可以检测到它。
我觉得代码不错。确保您的信标实际传输的是 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 月 15 日,参考应用程序中使用的 Android Beacon Library 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'
我指的是 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 信号?
P.s 有人还可以给出不同信号的样本 setBeaconLayout
部分列表吗?我假设如果我们只改变那部分,我们就可以接收信号(对于我们设置布局的信号格式。
非常感谢。
最近我也在努力实现同样的目标,并找到了解决方案 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 模式,然后打开信标,以便您的应用可以检测到它。
我觉得代码不错。确保您的信标实际传输的是 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 月 15 日,参考应用程序中使用的 Android Beacon Library 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'