Служба определения местоположения с использованием FusedLocationProviderClient собирает данные только один раз, когда выAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Служба определения местоположения с использованием FusedLocationProviderClient собирает данные только один раз, когда вы

Сообщение Anonymous »

Как видно из названия, я использую FusedLocationProviderClient для сбора данных о местоположении через определенные промежутки времени, и когда пользователь выбирает «Спрашивать каждый раз» при запросе разрешения на определение местоположения, обратный вызов местоположения вызывается один раз. .а потом больше никогда.
Кроме того, всякий раз, когда я проверяю разрешение на определение местоположения после этого первоначального сбора данных, оно всегда сообщает мне, что у приложения есть разрешение на определение местоположения, хотя оно все равно не будет собирать никаких данных. . Это проблематично, поскольку я не могу обработать отзыв разрешения в обратном вызове местоположения, если у меня нет возможности узнать, было ли отозвано разрешение.
Если бы я вышел из своего приложения и снова войдите в систему (не уничтожая процесс), оно не будет снова запрашивать разрешение, потому что ОС сообщает приложению, что оно уже предоставлено, но затем, когда запускается 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)
}
Я ссылался на документацию Android о поведении одноразового разрешения, и похоже, что в моем сценарии это должно работать, если только я не делаю что-то не так:

Если вы запустите службу переднего плана, когда активность видна, а затем пользователь переместит ваше приложение в фоновый режим, ваше приложение сможет продолжать получать доступ к данным до тех пор, пока служба переднего плана не остановится. .

В моем приложении страница входа запрашивает разрешение и запускает службу, которая собирает местоположение.

Подробнее здесь: https://stackoverflow.com/questions/791 ... lects-data
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»