Вы воссоздаете экземпляр AirLocation
каждые 2 секунды, что нехорошо, потому что, вероятно, у него не будет достаточно времени, чтобы даже получить данные о местоположении.Вы должны использовать тот же экземпляр.Чтобы решить эту проблему ...
Вы должны сделать переменную airLocation
закрытой переменной-членом класса.Я думаю, что вы уже сделали это ...
class YourActivity : AppCompatActivity() {
private var airLocation: AirLocation? = null
}
Затем инициализируйте эту переменную в onCreate
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
airLocation = AirLocation(this, true, true, object: AirLocation.Callbacks {
override fun onSuccess(location: Location) {
if(location != null){
currentAccuracy.text = location.accuracy.toString()
}
}
override fun onFailed(locationFailedEnum: AirLocation.LocationFailedEnum) {
}
})
}
Затем переопределите onActivityResult
и вызовите AirLocation
's onActivityResult
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
airLocation?.onActivityResult(requestCode, resultCode, data)
super.onActivityResult(requestCode, resultCode, data)
}
Это должно работать, если вы обрабатываете необходимые разрешения и настройки местоположения включены.К сожалению, эта библиотека не позволяет вам установить интервал между запросами местоположения, интервал установлен в 10 секунд с самым быстрым интервалом в 2 секунды, вы не можете изменить это.Вот фрагмент исходного кода ...
val locationRequest = LocationRequest().apply {
interval = 10000
fastestInterval = 2000
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
numUpdates = 1
}
Однако, если вам важно контролировать интервалы, вы можете создать свою собственную реализацию.Это не так сложно.Удачи