Фоновое отслеживание местоположения для расчета пройденного расстояния и карты маршрута

Я реализую приложение для Android на платформе Xamarin.Android, приложение используется для отслеживания пройденного расстояния и маршрута, по которому он проехал. с помощью службы определения местоположения в фоновом режиме и службы определения местоположения на переднем плане как для более низкой, так и для более высокой версии ОС Android.

Я столкнулся с проблемой в более поздних версиях устройств Android (версия ОС выше 8.0), когда пользователь закрыл приложение, моя служба переднего плана останавливается и я не могу отслеживать расстояние и маршрут. это дает мне только расстояние от начальной и конечной точек с Arial Route.

Пожалуйста, дайте мне любой другой способ решить мою проблему без использования API Google или Other Direction.


person Dhananjaya RB    schedule 03.04.2019    source источник
comment
Эта проблема возникает из-за режима ожидания и экономии заряда батареи. Максимальная помощь, которую может вам оказать любой, - это использование диспетчера питания или диспетчера пробуждения.   -  person FreakyAli    schedule 03.04.2019


Ответы (1)


Причина:

Чтобы сохранить заряд батареи, удобство работы пользователя и работоспособность системы, фоновые приложения реже получают обновления местоположения при использовании на устройстве под управлением Android 8.0. Это изменение поведения влияет на все приложения, которые получают обновления местоположения, включая сервисы Google Play.

Эти изменения затрагивают следующие API:

  • Поставщик объединенного местоположения (FLP)
  • Геозона
  • GNSS измерения
  • Менеджер местоположения
  • Wi-Fi менеджер

Решение:

В Android 8.0 представлен новый метод под названием Context. StartForegroundService () на стойке регистрации, чтобы запустить новую службу. После того, как система создаст приложение-службу, есть пять секунд, чтобы вызвать метод service startForeground visible () для отображения нового уведомления пользователей службы. Если приложение не запускается в течение этого срока

StartForeground (), то система остановит это приложение для службы и оператора ANR.

Intent service = new Intent(TheApplication.getInstance().getApplicationContext(), MyBackgroundService.class);
service.putExtra("startType", 1);
if (Build.VERSION.SDK_INT >= 26) {
    TheApplication.getInstance().startForegroundService(service);
} else {
    TheApplication.getInstance().startService(service);
}
person Lucas Zhang    schedule 04.04.2019
comment
Привет, Спасибо (Лукас Чжан - MSFT), можете ли вы предоставить пример проекта или ссылку на код для выборки фонового местоположения в xamarin. - person Dhananjaya RB; 04.04.2019
comment