gpt4 book ai didi

android - Kotlin 中的 getCurrentLocation() 方法?

转载 作者:行者123 更新时间:2023-12-02 01:44:14 24 4
gpt4 key购买 nike

当我尝试实现一个获取设备位置的简单示例时,我发现一个“看似官方”的文档:https://developer.android.com/training/location/retrieve-current#BestEstimate

文档声称FusedLocationProviderClient提供了以下两个方法:getLastLocation()getCurrentLocation()。但正如您在示例中看到的那样 - https://developer.android.com/training/location/retrieve-current#last-known - getLast/CurrentLocation() 都在 Java 中。相应的 Kotlin 示例表示 fusedLocationClient.getLastLocation()“与”fusedLocationClient.lastLocation 相同,并且确实运行良好。

我天真地假设应该有相应的“currentLocation”,例如fusedLocationClient.currentLocation

我想知道没有这样的,或者我是唯一一个没有找到相应的 Kotlin 方法的人。

最佳答案

在 kotlin 中,getX 形式的任何方法都可以写成 x,这称为“属性访问语法”。没有单独的 kotlin 版本。 fusedLocationClient.lastLocation 实际上与 fusedLocationClient.getLastLocation() 完全相同。如果需要,您甚至可以在 kotlin 中编写这最后一种形式。

但是,这仅适用于不带参数的“get”方法。问题是,getCurrentLocation 确实有参数,因此在这种情况下无法使用属性访问语法。如你所见here这是此方法的签名:

public Task<Location> getCurrentLocation (int priority, CancellationToken token)

所以你应该这样使用它。例如

fusedLocationClient.getCurrentLocation(LocationRequest.PRIORITY_HIGH_ACCURACY, null)

编辑:

显然 null 作为参数是不允许的。根据https://stackoverflow.com/a/72159436/1514861这是一种可能性:

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
}

}

关于android - Kotlin 中的 getCurrentLocation() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71137555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com