0

我正在尝试获取 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())
            }
    }

我也在 onResume 中尝试过,但仍然没有运气。

4

1 回答 1

0

loc属性设为委托属性:

var loc: Location? by Delegates.observable(null as? Location){
        _, _, newLoc ->
       // log
}

此委托可帮助您观察属性的任何更改

于 2019-04-21T18:49:36.583 回答