Народ, кто с геолокацией работал? Цель даже при выключенном экране раз в 30с писать локацию из любого доступного источника.
Приложение не для маркета, это для техников и диспетчер в рабочий день должен максимально точно понимать где человек для оптимизации работы. Так что можно любые “хаки” использовать.
Проблема в следующем, я поднимаю foreground service, он работает, даже когда процесс приложения убивает. Если выставить там wake lock, то даже в doze внутренний таймер тикает строго раз в 30с, если без wake lock, то в doze период увеличивается до 1-2 мин, я это вижу потом в логах. Т.е. сам сервис прекрасно себя чувствует.
Но девайс похоже вырубает локейшн провайдеров. Т.е. onLocationUpdate через некоторое время проведенное с выключенным экраном перестаёт дергаться. Как только включаешь экран, опять вызывается. В том или ином виде пытались это тестировать с разными API:
- FusedLocationProviderClient из gms, сам замедляется и в какой-то момент начинает слать одинаковые старые координаты одной и той же точки… вместо свежих.
- Сейчас остановились пока на подписку на два провайдера gps и network. Но оба “засыпают”.
Я пробовал “будить” их, если давно не было координат, то произвожу переподписку. Но эффект ровно тот же. Пробовал поставить старый wake lock на включение экрана (тот который SCREEN_DIM_WAKE_LOCK), думал может это разбудит и система стартанет провайдеров, но нет…
Кто сталкивался, есть что посоветовать?