На работе мы создали приложение, которое будет отслеживать маршруты, которые пользователь делает с работы, и у нас есть функция автоматической записи, но это не как мы хотели бы. Кажется, что автоматическая система отключается ОС через день или два бездействия (телефоны даже не двигаются за это время, они используются только для тестирования в основном).Автоматически запускать приложение через GPS-события на iOS и Android с Xamarin.Forms
В iOS мы используем CLRegions для создания пары областей вокруг текущего местоположения пользователя, существует 5 областей, созданных в точном местоположении пользователя с разными радиусами и 12, созданных в круге вокруг пользователя на расстоянии 10 метров (они имеют радиус 80 метров). Объекту CLLocationManager также предписывается начать мониторинг значительных изменений и посещений (хотя их еще нужно уволить даже один раз).
На Android мы используем Geofences через API LocationServices, и здесь у нас есть только 5 инкрементных радиусов вокруг текущего местоположения пользователя. Если пользователь закрывает приложение на Android или перезагружает свой телефон, он запустит фоновый сервис, который будет повторно инициализировать геообъекты и начать их контролировать.
Обе системы работают очень хорошо, когда я тестирую их, немного выходя на улицу, но кажется, что через день или два бездействия (ака выходные) они перестают работать. Я отлаживал это довольно долгое время, и хотя он стал лучше, он все еще не идеален.
Возможно ли иметь надежную систему автоматического запуска приложения в фоновом режиме при срабатывании геозонности/области независимо от того, как долго приложение отключено? Я знаю, что оба ОС выполняют фоновые задачи совсем по-другому, но я не совсем уверен в долгосрочных ограничениях использования GPS таким образом.
мы делаем приложение написано в Xamarin форм, но эти системы написаны на их родном проекте (все еще в C#, но полный доступ ко всей родной платформе)
Благодарим за информацию, что я не был полностью осведомлен о том, что даже служба на фоне будет остановлена системой через некоторое время на Android. Как вы думаете, есть ли способ обнаружить, когда намерение прекращено и действует на это? Ох, и вы можете легко дать образец Java, по большей части это другой синтаксис, а не на самом деле другой язык с Xamarin (хотя параметры манифеста определены в коде C#, а компилятор обрабатывает манифест XML) – zezioen
Что касается обнаружения для остановки службы вам понадобится процесс проверки того, что, в свою очередь, может быть убито, что возвращает нас к квадрату. Я обновил свой ответ с помощью образцов кода для службы переднего плана, а диспетчер аварийных сообщений перезапустил службу периодически. Надеюсь, это сработает для вас! –