Как получить последние значения от датчика Android TYPE_STEP_COUNTER после перезагрузки
Датчик TYPE_STEP_COUNTER имеет тип REPORTING_MODE_ON_CHANGE и "Датчик этого типа возвращает количество шагов, выполненных пользователем с момента последней перезагрузки при активации. Значение возвращается в виде числа с плавающей запятой (с дробной частью, установленной в ноль), и сбрасывается на ноль только при перезагрузке системы. "
Проблема с этим датчиком заключается в том, что он не вызывает обратный вызов onSensorChanged() в моей фоновой службе, если только не запущено само приложение ИЛИ служба не запланирована с AlarmManager. Так как сигнал тревоги срабатывает не слишком часто (чтобы уменьшить потребление энергии), сценарий, когда пользователь проходит несколько тысяч шагов и затем выключает телефон, совершенно губит для подсчета шагов. Такие шаги теряются навсегда, потому что после перезагрузки датчик сообщает о новых шагах от 0.
Что я пробовал:
- setForeground() на Сервисе, который слушает шаги (никакого эффекта, все еще onSensorChanged() обратный вызов не вызван)
- startService () для android.intent.action.ACTION_SHUTDOWN из BroadcastReceiver для отслеживания шагов до завершения работы (не надежно)
- TYPE_STEP_DETECTOR бесполезен, так как его нет на большом количестве телефонов
Буду признателен за идеи, как не потерять эти шаги при отключении. Может быть, есть какая-то хитрость с получением значения последних шагов до перезагрузки? Или вариант, чтобы моя фоновая служба уведомлялась о onSensorChanged, даже когда приложение не активно и никакая тревога не вызывает службу?
PS В Google Fit, кажется, все этапы не повреждены, независимо от перезагрузок, так что я думаю, что должно быть решение.