Я работаю над приложением отслеживания поездок на работу, которое автоматически регистрирует пользователей, переключающихся между геозонами. Приложение должно отвечать следующим требованиям:
- Реагировать на события входа и выхода геозоны, когда приложение используется или закрыто
- Когда пользователь переходит из режима ожидания в режим ходьбы / езды на велосипеде / вождение и c, начать запись местоположения пользователя
- Когда пользователь переходит от ходьбы / езды на велосипеде / вождения и т. д. c в режим ожидания, остановите запись местоположения пользователя
- На событии выхода из геозоны начните запись движения
- В событии входа в геозону завершите и запишите запись на поездку
Моя текущая настройка:
- A
GeofenceBroadcastReceiver
прослушивать события входа / выхода геозоны - A
GeofenceTransitionsJobIntentService
для обработки событий геозоны из GeofenceBroadcastReceiver
- A
ActivityTransitionsBroadcastReceiver
, который обрабатывает события движения из Android переходов активности API и запускает LocationUpdateForegroundService
- A
LocationUpdateForegroundService
, который отслеживает обновления местоположений пользователя и управляет службой переднего плана, так что все продолжает работать, когда приложение не «открыто»
ActivityTransitionsBroadcastReceiver
и LocationUpdateForegroundService
отлично работает. Когда пользователь начинает ходить / кататься на велосипеде и т.д. c, приложение распознает его, и служба переднего плана запускается, как ожидается, и останавливается, когда пользователь переходит обратно в режим ожидания.
Основная проблема заключается в том, что события входа / выхода Geofence сильно различаются по своей доставке. Я прочитал о фоновых пределах выполнения события геозоны на современных уровнях ОС, и, когда приложение работало в ForegroundService
, когда пользователь фактически находится в движении, я ожидал, что события геозоны будут доставлены своевременно и надежно.
Кто-нибудь может подтвердить, что я здесь что-то очень не так делаю? Разумна ли моя логика высокого уровня? Я могу опубликовать код, если кто-то думает, что я буду полезен.
Спасибо.