【问题标题】: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】:

    根据documentationgetCurrentLocation() 有两个参数。

    第一它采用的参数是优先(例如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
                    }
    
                }
    
        }
    }
    

    【讨论】:

    • CancellationToken 是什么?
    【解决方案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
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 2021-04-12
      • 2013-04-12
      • 2018-02-08
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      相关资源
      最近更新 更多