Служба определения местоположения с использованием 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»