#android
#Android
Вопрос:
Android Studio 3.4
Я использую FusedLocationProviderClient
для получения координат широты и длительности.
Однако сценарий, который я тестирую, заключается в том, что пользователь отключает местоположение в настройках. Обычно это приводит к удалению любых данных о местоположении при повторном включении.
В следующем фрагменте я пытаюсь справиться с этим сценарием, запрашивая обновления местоположения. Однако приложение не получит никаких последних обновлений, и я бы хотел, чтобы время ожидания запроса истекло. Я создал LocationResult
с setExpirationDuration
мыслью, что это может произойти через 10 секунд, если я установлю его на 10000 мс. Но ничего не произошло.
private fun getLocationFused() {
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED amp;amp;
ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION), permissionRequestCode)
}
else {
fusedLocationProviderClient.lastLocation.addOnSuccessListener(this) { location ->
if(location != null) {
forecastPresenter.requestWeatherForecast(location.latitude, location.longitude)
}
else {
val locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
forecastPresenter.requestWeatherForecast(locationResult.lastLocation.latitude, locationResult.lastLocation.longitude)
fusedLocationProviderClient.removeLocationUpdates(this)
}
}
val locationResult = LocationRequest()
locationResult.maxWaitTime = 10000
fusedLocationProviderClient.requestLocationUpdates(locationResult, locationCallback, null)
}
}.addOnFailureListener(this) {
println(it.message)
}.addOnCanceledListener(this) {
println("Cancelled")
}
}
}
Если событие истекло после тайм-аута, какой метод будет вызван? onLocationResult
Вернется ли значение nul locationResult
?
Большое спасибо за любые предложения,
Комментарии:
1.Возможно, вы можете попробовать
setMaxWaitTime()
метод. Согласно документу, он устанавливает максимальное время ожидания в миллисекундах для обновлений местоположения. developers.google.com/android/reference/com/google/android/gms /…2. @Lodoss, я пробовал это. Но интересно, какое событие я могу зафиксировать после истечения времени ожидания? Будет ли это в случае нулевого результата location в onLocationResult после тайм-аута? Просто интересно, как когда я пробовал, ничего не произошло. Поэтому не удается справиться с проблемой тайм-аута
3. Я только что увидел, что вы завернули свой
LocationCallback
вOnSuccessListener
. Поскольку провайдер не сможет успешно получить местоположение, прослушиватель успеха может не вызываться, верно? Если это так, обновления местоположения вашего запроса не прекратятся. Я не очень знаком с процессом определения местоположения, но, возможно, вы можете попытаться удалить прослушиватель успеха. Также обратитесь к этому tuto .4. @Lodoss Я обновил свой ответ. Я думаю, вы правы насчет того, что
LocationCallBack
вOnSuccessListener
я добавилaddOnFailureListener
иaddOnCancelledListener
, которые связаны, однако тайм-аут не срабатываетfailureListener
иcancelledListener
.5. @Lodoss В принципе, то, что я пытаюсь сделать, это просто обработать тайм-аут, чтобы приложение не зависало в ожидании успешного определения местоположения. В течение периода тайм-аута, если я открою карты Google,
onLocationResult
сработает с обновленным местоположением. Однако в моем случае я просто хочу установить тайм-аут примерно через 10 секунд, если местоположение не обновляется.