【问题标题】:How to get location using "fusedLocationClient.getCurrentLocation" method in Kotlin?如何在 Kotlin 中使用“fusedLocationClient.getCurrentLocation”方法获取位置?
【发布时间】:2022-10-24 01:44:00
【问题描述】:
要请求用户设备的最后一个已知位置,我们可以使用fused location provider 使用getLastLocation() 检索设备的最后一个已知位置,但使用getCurrentLocation() 可以获得更准确的位置。
那么,如何在 Kotlin 中使用fusedLocationClient.getCurrentLocation(),因为文档中没有说明示例?
【问题讨论】:
标签:
android
android-location
kotlin-android
【解决方案1】:
根据documentation,getCurrentLocation() 有两个参数。
这第一它采用的参数是优先(例如PRIORITY_HIGH_ACCURACY)以请求最准确的可用位置,或可以找到here 的任何其他优先级。
这第二它采用的参数是取消令牌可用于取消当前位置请求。
从谷歌播放服务reference,一个CancellationToken可以只要通过创建 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
}
}
}
}
【解决方案2】:
fusedLocationClient.getCurrentLocation(Priority.PRIORITY_HIGH_ACCURACY, object : CancellationToken() {
override fun onCanceledRequested(listener: OnTokenCanceledListener) = CancellationTokenSource().token
override fun isCancellationRequested() = false
})
.addOnSuccessListener {
if (it == null)
Toast.makeText(this, "Cannot get location.", Toast.LENGTH_SHORT).show()
else {
val lat = it.latitude
val lon = it.longitude
}
}