我正在尝试获取Android设备的位置。我一直在关注these instructions for using 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)
}
我尝试将融合位置客户端初始化放在onCreate()
中,并将融合位置客户端作为私有属性:
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())
}
}
我也在onResume中尝试过,但还是没有运气。
答案 0 :(得分:0)
将loc
属性作为委派属性:
var loc: Location? by Delegates.observable(null as? Location){
_, _, newLoc ->
// log
}
此代表可以帮助您观察对该属性的任何更改