Android События Geofence не вызываются во время работы Foreground Service - PullRequest
1 голос
/ 29 апреля 2020

Я работаю над приложением отслеживания поездок на работу, которое автоматически регистрирует пользователей, переключающихся между геозонами. Приложение должно отвечать следующим требованиям:

  • Реагировать на события входа и выхода геозоны, когда приложение используется или закрыто
  • Когда пользователь переходит из режима ожидания в режим ходьбы / езды на велосипеде / вождение и c, начать запись местоположения пользователя
  • Когда пользователь переходит от ходьбы / езды на велосипеде / вождения и т. д. c в режим ожидания, остановите запись местоположения пользователя
  • На событии выхода из геозоны начните запись движения
  • В событии входа в геозону завершите и запишите запись на поездку

Моя текущая настройка:

  • A GeofenceBroadcastReceiver прослушивать события входа / выхода геозоны
  • A GeofenceTransitionsJobIntentService для обработки событий геозоны из GeofenceBroadcastReceiver
  • A ActivityTransitionsBroadcastReceiver, который обрабатывает события движения из Android переходов активности API и запускает LocationUpdateForegroundService
  • A LocationUpdateForegroundService, который отслеживает обновления местоположений пользователя и управляет службой переднего плана, так что все продолжает работать, когда приложение не «открыто»

ActivityTransitionsBroadcastReceiver и LocationUpdateForegroundService отлично работает. Когда пользователь начинает ходить / кататься на велосипеде и т.д. c, приложение распознает его, и служба переднего плана запускается, как ожидается, и останавливается, когда пользователь переходит обратно в режим ожидания.

Основная проблема заключается в том, что события входа / выхода Geofence сильно различаются по своей доставке. Я прочитал о фоновых пределах выполнения события геозоны на современных уровнях ОС, и, когда приложение работало в ForegroundService, когда пользователь фактически находится в движении, я ожидал, что события геозоны будут доставлены своевременно и надежно.

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

Спасибо.

...