Я стараюсь использовать приложение для навигации на открытом воздухе с использованием маяков Estimote. Вот код, который я использовал для получения расстояния между устройством Android и маяками. Эти разделы кода работают примерно через каждые 1 секунду.Выполнять метод BEACON каждые 100 миллисекунд в Android
Мне нужно выполнить это каждые 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 секундой? – davidgyoung
Отредактировано код. Я не знаю причину времени, ограниченного 1 секундой. Мне нужно выполнить этот код каждые 100 миллисекунд. –
Видимо вы используете Android SDK Estimote. По-видимому, умные умы в Estimote пришли к выводу, что 1-секундный интервал сканирования является оптимальным, учитывая все различные факторы, такие как частота рекламы их маяков, люди обычно движутся всего на 1 метр в секунду и т. Д. По-видимому, их SDK доступен только как AAR, поэтому обратное проектирование это немного сложнее, но не невозможно. Но, вероятно, лицензия не позволяет «взломать» ее. Я не знаю. Вероятно, где-то в классе «BeaconManager» лежит секрет частоты сканирования. –