如何在 Kotlin 中使用 "fusedLocationClient.getCurrentLocation" 方法获取位置?
How to get location using "fusedLocationClient.getCurrentLocation" method in Kotlin?
要请求用户设备的最后一个已知位置,我们可以使用 fused location provider 使用 getLastLocation()
检索设备的最后一个已知位置,但使用 getCurrentLocation()
可以重温一下,和更准确的位置。
所以,文档中没有说明示例,如何在 Kotlin 中使用 fusedLocationClient.getCurrentLocation()
?
根据documentation,getCurrentLocation()
有两个参数。
它采用的 1st 参数是 priority(例如 PRIORITY_HIGH_ACCURACY
)以请求最准确的可用位置,或者可以找到的任何其他优先级 here.
它接受的2nd参数是一个取消令牌,可用于取消当前位置请求。
从 Google 播放服务 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
}
}
}
}
要请求用户设备的最后一个已知位置,我们可以使用 fused location provider 使用 getLastLocation()
检索设备的最后一个已知位置,但使用 getCurrentLocation()
可以重温一下,和更准确的位置。
所以,文档中没有说明示例,如何在 Kotlin 中使用 fusedLocationClient.getCurrentLocation()
?
根据documentation,getCurrentLocation()
有两个参数。
它采用的 1st 参数是 priority(例如 PRIORITY_HIGH_ACCURACY
)以请求最准确的可用位置,或者可以找到的任何其他优先级 here.
它接受的2nd参数是一个取消令牌,可用于取消当前位置请求。
从 Google 播放服务 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
}
}
}
}