Фоновое отслеживание местоположения для расчета расстояния и карты маршрутов, по которым они проехали - PullRequest
1 голос
/ 03 апреля 2019

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

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

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

1 Ответ

0 голосов
/ 04 апреля 2019

Причина:

Чтобы сохранить заряд батареи, работу пользователя и работоспособность системы, фоновые приложения получают обновления местоположения реже при использовании на устройстве под управлением 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);
}
...