Как получить количество шагов из фонового приложения с помощью JobScheduler

#android #background #android-sensors #android-jobscheduler #pedometer

#Android #фон #android-датчики #android-jobscheduler #шагомер

Вопрос:

Документы Android для датчика STEP_COUNTER немного сбивают с толку.

В соответствии с этим: Android Sensor doc Я всегда должен регистрировать датчик STEP_COUNTER, потому что в противном случае датчик счетчика шагов вообще не будет учитываться. Все в порядке и работает, как ожидалось, до тех пор, пока я не думаю, что Android 10, когда события датчиков больше не отправляются в фоновые приложения.

Итак, я попытался воспользоваться советом из этого другого документа со счетчиком шагов, рекомендующего использовать JobScheduler для периодического считывания последнего значения. Теперь, afaik, нет способа получить последнее значение от датчика, я должен зарегистрировать SensorEventListener, как всегда.

Итак, теперь я попытался объединить два совета: всегда регистрируйте датчик счетчика шагов, чтобы аппаратный датчик считал, поскольку я всегда получаю новое событие при регистрации своего слушателя, я попытался отменить регистрацию и повторно зарегистрировать этого слушателя при выполнении JobScheduler, но я не смог получитьпоследнее количество шагов в фоновом режиме на моем Pixel под управлением Android 11, независимо от того, какой метод я пробовал.

Я знаю, что у нас есть Google Fit, но для этого конкретного сценария было бы достаточно использовать базовый счетчик шагов, если бы я мог считывать последнее значение также при запуске JobScheduler, как указано в документации.

Кто-нибудь знает, должно ли это быть возможным или просто документы не обновляются?

Комментарии:

1. В настоящее время я сталкиваюсь с той же проблемой. Вы смогли это выяснить?

2. Нет, мне пришлось сдаться. Документация на тот момент противоречила. Казалось, что это должно работать с JobScheduler, но, похоже, все датчики теперь заблокированы в фоновом режиме. Вместо этого мне пришлось начать использовать Google Fit. Это работает хорошо, но требует гораздо больше работы для настройки, а также требует дополнительного входа пользователя.

3. Я чувствую тебя. Документация не улучшилась, она по-прежнему противоречит и явно предлагает JobScheduler (чего, как мы знаем, недостаточно). Я с некоторым успехом реализовал нечто похожее на то, что предлагает Алексей, используя WorkManager. Но все еще возникают некоторые трудности: ‘(

Ответ №1:

Ваше приложение должно находиться в режиме переднего плана, чтобы получать данные датчиков. У меня работает с прикреплением уведомления переднего плана к рабочему (workmanager setForegroundAsync). Я думаю, что ваше решение также будет работать, если служба переднего плана будет активна.

Комментарии:

1. Вы когда-нибудь проходили через приложение SSG StepSetGo? Даже если приложение отключено и без службы переднего плана они показывают последнее количество шагов. Как они могли это сделать?