【发布时间】:2016-10-05 15:00:17
【问题描述】:
我尝试使用 Estimote 信标做室内导航 android 应用程序。这是我用来获取 android 设备和信标之间距离的代码。此代码段大约每 1 秒运行一次。
我需要每 100 毫秒执行一次。
beaconManager.setRangingListener(new BeaconManager.RangingListener() {
@Override public void onBeaconsDiscovered(Region region, final List<Beacon> beacons) {
runOnUiThread(new Runnable() {
@Override public void run() {
long time= System.currentTimeMillis();
Log.i("###################### ", " #################");
Log.i("Time Class ", " Time value in millisecinds "+time);
toolbar.setSubtitle("Found beacons: " + beacons.size());
ArrayList<Beacon> newBeacons = new ArrayList<>();
for (int x=0; x<beacons.size();x++) {
int major= beacons.get(x).getMajor();
int minor = beacons.get(x).getMinor();
if (major==3&&minor==3) {
newBeacons.add(beacons.get(x));
Dsi[0] = Utils.computeAccuracy(beacons.get(x));
}
else if (major==4&&minor==4) {
newBeacons.add(beacons.get(x));
Dsi[1] = Utils.computeAccuracy(beacons.get(x));
}
else if (major==2&&minor==2) {
newBeacons.add(beacons.get(x));
Dsi[2] = Utils.computeAccuracy(beacons.get(x));
}
}
double[][] positions = new double[][] { { -3.4, 0.8}, { 0, 7.5 }, { 6.7, 6.7 } };
double[] distances = new double[] { Dsi[0], Dsi[1], Dsi[2] };
TrilaterationFunction trilaterationFunction = new TrilaterationFunction(positions, distances);
LinearLeastSquaresSolver lSolver = new LinearLeastSquaresSolver(trilaterationFunction);
NonLinearLeastSquaresSolver nlSolver = new NonLinearLeastSquaresSolver(trilaterationFunction, new LevenbergMarquardtOptimizer());
double[] expectedPosition = new double[] { 3.3, 15.0 };
RealVector x = lSolver.solve();
Optimum optimum = nlSolver.solve();
testResults(expectedPosition, 1, optimum, x);
adapter.replaceWith(newBeacons);
time= System.currentTimeMillis();
Log.i("Time Class ", " Time value in millisecinds "+time);
Log.i("###################### ", " #################");
}
});
}
});
我该怎么做?
【问题讨论】:
-
您没有显示启动所示代码的原因。这是什么时候执行的?为什么目前限制为 1 秒?
-
编辑了代码。我不知道时间限制为 1 秒的原因。我需要每 100 毫秒执行一次此代码。
-
显然您正在使用 Estimote 的 Android SDK。显然,Estimote 的聪明头脑已经得出结论,考虑到所有不同的因素,如信标的广告频率、人们通常仅移动 1 米/秒等,1 秒的扫描间隔是最佳的。显然,他们的 SDK 仅作为AAR 库,所以逆向工程有点困难,但并非不可能。但可能许可证不允许“破解”它。我不知道。可能在
BeaconManager类中的某个地方隐藏着扫描频率的秘密。 -
你可能会得到一个更有教育意义的答案on their own forum。
-
@MarkusKauppinen 感谢您的评论。我使用 timetask 来做到这一点。但这不是解决方案。我需要将扫描间隔减少到 100 毫秒。 Estimote Beacon 的发射功率可以降低到 100 毫秒。我会遵循这个。感谢您的建议
标签: android runnable ibeacon-android estimote