如何在 Kotlin 中使用 "fusedLocationClient.getCurrentLocation" 方法获取位置?

How to get location using "fusedLocationClient.getCurrentLocation" method in Kotlin?

要请求用户设备的最后一个已知位置,我们可以使用 fused location provider 使用 getLastLocation() 检索设备的最后一个已知位置,但使用 getCurrentLocation() 可以重温一下,和更准确的位置。

所以,文档中没有说明示例,如何在 Kotlin 中使用 fusedLocationClient.getCurrentLocation()

根据documentationgetCurrentLocation()有两个参数。

它采用的 1st 参数是 priority(例如 PRIORITY_HIGH_ACCURACY)以请求最准确的可用位置,或者可以找到的任何其他优先级 here.

它接受的2nd参数是一个取消令牌,可用于取消当前位置请求。

从 Google 播放服务 referenceCancellationToken 只能 通过创建 CancellationTokenSource 的新实例来创建。

所以这是使用getCurrentLocation()

时需要使用的代码
class YourActivity : AppCompatActivity() {

    private lateinit var fusedLocationClient: FusedLocationProviderClient

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.your_layout)

        fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)

        fusedLocationClient.getCurrentLocation(LocationRequest.PRIORITY_HIGH_ACCURACY, object : CancellationToken() {
                override fun onCanceledRequested(p0: OnTokenCanceledListener) = CancellationTokenSource().token

                override fun isCancellationRequested() = false
            })
            .addOnSuccessListener { location: Location? ->
                if (location == null)
                    Toast.makeText(this, "Cannot get location.", Toast.LENGTH_SHORT).show()
                else {
                    val lat = location.latitude
                    val lon = location.longitude
                }

            }

    }
}