Как только приложение снова оказывается на переднем плане, процедура возобновляется, и обратный вызов местоположения вызывается правильно.
p>
Раньше у меня было подобное поведение, если мне не было предоставлено разрешение ACCESS_BACKGROUND_LOCATION. Однако в данном случае у меня есть такое разрешение.
Мой код местоположения выполняется в Worker примерно каждую минуту. Имейте в виду, что многие строки были опущены, чтобы сделать этот пост простым. Если я упустил что-то важное, я могу добавить это здесь.
Код: Выделить всё
private var fusedLocationClient: FusedLocationProviderClient? = null
private lateinit var locationCallback: LocationCallback
...
override fun doWork(): Result {
...
fusedLocationClient = LocationServices.getFusedLocationProviderClient(appContext)
locationCallback = object : LocationCallback() {
override fun onLocationResult(locRes: LocationResult) {
/* this is what's never getting reached when the app is in the background */
}
}
val locationRequestBuilder = LocationRequest.Builder(1000)
.setPriority(Priority.PRIORITY_HIGH_ACCURACY)
val locationBuilder = LocationSettingsRequest.Builder().addLocationRequest(locationRequestBuilder.build())
val settingsResult = LocationServices.getSettingsClient(appContext).checkLocationSettings(locationBuilder.build())
settingsResult.addOnCompleteListener { response ->
fusedLocationClient!!.requestLocationUpdates(locationRequestBuilder.build(), locationCallback, null)
}
...
}
На той же странице рекомендовалось использовать диспетчер работ вместо службы переднего плана, что заставило меня переключиться с сервиса на работника. В любом случае то, что пыталась сделать Служба, похоже, больше соответствует тому, что должен делать работник. Казалось, до какого-то момента в прошлом месяце это работало нормально.
Теоретически я мог бы переместить все обратно в службу переднего плана, а затем изменить службу так, чтобы она работала непрерывно, а не делать это один раз. задачу и планирование себя снова и снова, но я стараюсь избежать такого серьезного рефакторинга, если это возможно.
Моя главная цель — заставить его выполнять свои краткосрочные задачи, и планирование самого себя, как это происходит уже почти 7 лет. Но если этот подход больше нереализуем, я просто стисну зубы и проведу его рефакторинг.
Что я пробовал:
- Приложение удалено и переустановлено.
- Проверено на версиях SDK до 28 (в SDK 28 оно делает то же самое, что и в SDK 34 или 35).
- Очистил кеш приложения.
- Отменил все разрешения и вернул все разрешения (и ACCESS_BACKGROUND_LOCATION
Код: Выделить всё
ACCESS_FINE_LOCATION
- Проверено: у меня есть все разрешения на определение местоположения в AndroidManifest.xml
- Проверено, что батарея экономит заряд не был включен (известно, что такое поведение проявляется, если включена экономия заряда батареи).
- Проверьте доступность сервисов Google Play (с помощью метода GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(appContext))
- Заменить использование устаревших методов неустаревшими аналогами
Подробнее здесь: https://stackoverflow.com/questions/791 ... nging-whil