Кроме того, всякий раз, когда я проверяю разрешение на определение местоположения после этого первоначального сбора данных, оно всегда сообщает мне, что у приложения есть разрешение на определение местоположения, хотя оно все равно не будет собирать никаких данных. . Кажется, что у меня больше нет разрешения после того, как я получил его один раз (вопреки тому, что написано в документации; см. конец этого поста).
Если бы я это сделал выйдите из моего приложения и войдите снова (не уничтожая процесс), оно не будет запрашивать разрешение снова, потому что ОС сообщает приложению, что оно уже предоставлено, но затем, когда запускается FusedLocationProviderClient, он пытается поймать точку, но это устаревший, и его временная метка относится примерно к тому времени, когда я впервые предоставил разрешение «спрашивать каждый раз».
Главное, что я ищу здесь заключается в следующем: есть ли способ правильно обрабатывать «Спрашивать каждый раз» в этом сценарии? Или это может быть ошибка FusedLocationProviderClient, которая, несмотря на предоставленное разрешение, не собирает данные, когда выбрано «спрашивать каждый раз»?
Поток моего приложения выглядит как-то вот так:
- Пользователь входит в систему.
- Если пользователю не предоставлено разрешение на определение местоположения, ему будет предложено для этого разрешения.
- При успешном входе в систему мой Запускается LocationService, который будет собирать данные о местоположении каждую минуту.
- При успешном выходе из системы сбор данных прекращается.
Мой код местоположения выглядит примерно так. Представьте, что этот код вызывается сразу после предоставления разрешения путем выбора «Спрашивать каждый раз».
Код: Выделить всё
private var fusedLocationClient: FusedLocationProviderClient? = null
private lateinit var locationCallback: LocationCallback
...
locationCallback = object : LocationCallback() {
override fun onLocationResult(locRes: LocationResult) {
// I perform the permission check here, and it still says granted, even though it's acting as if it is not
}
}
val locationRequest = LocationRequest.Builder(60000) // 1 minute
.setPriority(HIGH_ACCURACY)
.setMinUpdateIntervalMillis(60000) // 1 minute
.build()
val locationBuilder = LocationSettingsRequest.Builder().addLocationRequest(locationRequest)
val settingsResult = LocationServices.getSettingsClient(appContext).checkLocationSettings(locationBuilder.build())
settingsResult.addOnCompleteListener { locationSettingsTask ->
fusedLocationClient!!.requestLocationUpdates(locationRequest, locationCallback, null)
}
Если вы запустите службу переднего плана, когда активность видна, а затем пользователь переместит ваше приложение в фоновый режим, ваше приложение сможет продолжать получать доступ к данным до тех пор, пока служба переднего плана не остановится. .
В моем приложении страница входа запрашивает разрешение и запускает службу, которая собирает местоположение.>
Подробнее здесь: https://stackoverflow.com/questions/791 ... lects-data