Я думаю, что нашел решение для этого.
Если вы хотите найти шаги в интервале от t1 до t2 вместо:
const steps = await Pedometer.getStepCountAsync(t1, t2);
сделать следующее:
const t0 = new Date(0);
const steps1 = await Pedometer.getStepCountAsync(t0, t1);
const steps2 = await Pedometer.getStepCountAsync(t0, t2);
const steps = steps2 - steps1; // THIS IS THE ANSWER!
Это не решает проблему с самим шагомером / Экспо, но дает стабильное решение: все шаги в подинтервалах теперь складываются в шаги во всем интервале.
ВАЖНОЕ ОБНОВЛЕНИЕ
Решение выше работает для iOS, но вылетает шагомер на Android. Поэтому я пришел с другим решением (использовать более короткий интервал):
const t0 = startOfDay(t1); // beginning of the same day works fine for me
const steps1 = await Pedometer.getStepCountAsync(t0, t1);
const steps2 = await Pedometer.getStepCountAsync(t0, t2);
const steps = steps2 - steps1; // THIS IS THE ANSWER!
ЕЩЕ ОДНО ВАЖНОЕ ОБНОВЛЕНИЕ
Также я заметил, что если вы сделаете что-то вроде:
await Pedometer.getStepCountAsync(t0, t0); // when both parameters are equal
Это также дает сбой на Android.
ДАЖЕ БОЛЬШЕ ВАЖНОЕ ОБНОВЛЕНИЕ
Обратите внимание, что t0
должно быть началом дня !!! Я узнал об этом, экспериментируя с разными устройствами. Также, чтобы избежать ошибки Android при прохождении одинакового времени, просто добавьте функцию-обертку, которая проверяет равенство дат и возвращает 0
в таком случае.