【发布时间】:2014-06-03 06:47:58
【问题描述】:
继续我之前的问题here,我不再遵循为所有信标创建单个区域的方法。现在我在运行时创建区域。我先做了测距。 下面是我试图实现的代码。
public void onBeaconsDiscovered(Region region, final List<Beacon> beacons) {
for(int i =0;i<beacons.size();i++)
{
Region r = new Region("RegionID", beacons.get(i).getProximityUUID(), beacons.get(i).getMajor(), beacons.get(i).getMinor());
try {
beaconManager.startMonitoring(r);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
public void onEnteredRegion(Region arg0, List<Beacon> arg1) {
//Log Data in DB
}
public void onExitedRegion(Region region) {
//Log Data in DB
}
上述方法正确吗?问题是,有时,同一信标在 onEnteredRegion() 中进入两次,但没有退出。我试图玩弄前景和背景扫描的扫描间隔,但事情不同步。我正在使用 Estimote 用于 android 的信标 SDK。
【问题讨论】:
-
你真的不应该创建大量的区域 - 你会用 android 客户端逃脱它,但 iOS 设备将只能寻找有限数量的区域,所以你的方法将您的系统锁定为仅限 android,基本上没有收获。就 android 而言,整个数据包只是任意数据,因此您最好以与 iDevice 兼容的方式分配区域和主要/次要部分,而不是您在此处选择的基本上与 iDevice 不兼容的多区域方案.
-
@ChrisStratton:为所有信标创建单个区域的问题是 - 我没有收到 onExitedRegion() 回调,除非该区域的所有信标实际退出。我们计划在 500 多个信标上进行测试!如果还有其他更优化的方法,请告诉我。
-
在 Android 上,这完全是在您控制的代码中实现的,因此您可以从源头上修复它。如果供应商库是困难的来源,请不要使用它。但是您可能无论如何都不想依赖退出区域。
-
我正在尝试计算一个人在该地区的平均停留时间。我的理解是我可以通过在进入和退出区域记录时间并计算持续时间来实现这一点。这是我想听 onExitedRegion 回调的唯一原因。如果我的方法有误,请纠正我。
标签: android ibeacon ibeacon-android estimote android-ibeacon