#android #xamarin.android #android-gps
#Android #xamarin.android #android-gps
Вопрос:
Я внедряю приложение для Android на Xamarin.Платформа Android, приложение используется для отслеживания пройденного расстояния и маршрута, по которому он путешествовал. используя фоновую службу определения местоположения и службу определения местоположения на переднем плане как для более низкой, так и для более высокой версии ОС Android.
Я сталкиваюсь с проблемой в более поздней версии устройств Android (выше версии ОС 8.0), когда пользователь закрывает приложение, моя служба переднего плана останавливается, и я не могу отслеживать расстояние и маршрут. это дает мне только начальную и конечную точки с Arial Route.
Пожалуйста, дайте мне любой другой способ решить мою проблему без использования Google или других API Direction.
Комментарии:
1. Эта проблема возникает благодаря doze и battery saver максимальная помощь, которую кто-либо может вам оказать, — это попросить вас использовать Power manager или Wake manager
Ответ №1:
Причина:
В целях экономии заряда батареи, удобства работы пользователя и работоспособности системы фоновые приложения реже получают обновления местоположения при использовании на устройстве под управлением Android 8.0. Это изменение поведения влияет на все приложения, которые получают обновления местоположения, включая службы Google Play.
Эти изменения влияют на следующие API:
- Объединенный поставщик местоположения (FLP)
- Геозона
- Измерения GNSS
- Диспетчер местоположения
- Менеджер Wi-Fi
Решение:
Android 8.0 представляет новый метод, называемый контекстом. Запустите ForegroundService () на стойке регистрации, чтобы запустить новую услугу. После того, как система создаст сервисное приложение, у вас есть пять секунд, чтобы вызвать метод 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);
}
Комментарии:
1. Привет, спасибо (Лукас Чжан — MSFT) можете ли вы привести пример проекта или ссылку на код для получения фонового местоположения в xamarin.
2. learn.microsoft.com/en-us/xamarin/android/app-fundamentals/…