Я создал поток, который отправляет показания барометра каждые несколько миллисекунд (не настраивается с помощью Android Sensors API). Используя этот поток, я хотел бы создать другой поток, который получает показания только каждые 10 секунд. Это потому, что я хочу сравнить показания только между 10-секундными интервалами, чтобы любая обнаруженная разница показаний давления была достаточно значительной для обработки.
Вот мой код для потока показаний Барометра:
// Starts subscription to barometer events
static startBarometerService() {
oldReading = 0;
newReading = 0;
upFloor = false;
downFloor = false;
subscription = barometerEvents.listen(onBarometer);
streamController = new StreamController();
print("[BAROMETER] started listening to barometer events");
}
static onBarometer(BarometerEvent event) {
oldReading = newReading;
newReading = event.reading;
updateFloor();
}
У меня также есть другой поток, созданный на основе потока барометра, для сравнения высоты и проверки того, поднялся ли пользователь вверх или вниз по полу, например:
static updateFloor(double reading) {
if ((newReading - oldReading) > 10) {
upFloor = true;
print("[BAROMETER] User went up one floor");
streamController.add([upFloor, downFloor]);
} else if ((newReading - oldReading) < -10) {
downFloor = true;
streamController.add([upFloor, downFloor]);
print("[BAROMETER] User went down one floor");
}
else {
upFloor = false;
downFloor = false;
}
}
Теперь я хочу свой newReading
и oldReading
для выборки с интервалом в 10 секунд, чтобы иметь достаточно существенную разницу.
Да, я знаю, что API датчиков Android позволяет мне вводить пользовательскую частоту дискретизации, но это не работает надежно (в документации по API говорится, что это воспринимается только как «подсказка системе»). Поэтому я хотел бы знать, как реализовать этот таймер periodi c, используя код Dart.
Заранее спасибо за помощь!