Я пытаюсь определить местоположение устройства Android.Я следовал этим инструкциям по использованию fusedLocationClient .
Я не могу назначить переменные вне .addSuccessListener
.
Я буду что журналы вне слушателявызывается перед журналами внутри прослушивателя событий, поэтому я должен пытаться назначить переменные до вызова прослушивателя.Это имеет смысл, потому что слушатели являются асинхронными.
override fun onMapReady() {
var loc: Location = Location("")
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
fusedLocationClient.lastLocation
.addOnSuccessListener { location : Location ->
loc = location
Log.i("Lat, Long",loc.latitude.toString() + ", " + loc.longitude.toString()) // this correctly logs the latitude and longitude
}
Log.i("Lat, Long",loc.latitude.toString() + " " + loc.longitude.toString()) // this logs latitude and longitude as (0.0,0.0)
}
Я попытался поместить инициализацию fusedLocationClient в onCreate()
и иметь fusedLocationClient в качестве частного свойства:
private fusedLocationClient: FusedLocationProviderClient
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_display_map)
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
fusedLocationClient.lastLocation
.addOnSuccessListener { location : Location ->
loc = location
Log.e(loc.latitude.toString(), loc.longitude.toString())
}
}
Я такжепопробовал это в Resume, но все равно не повезло.