首页 > 解决方案 > 具有当前位置的 Location 实例

问题描述

在我的程序中,我想获取一个字符串,其中包含与手机上的位置相对应的城市名称。我有地理编码器代码:

class LocationData : LocationDataInterface{
    var result: String = ""
     override fun getAdreesTown(location: Location, context: Context): String {
         val thread = Thread(
             Runnable {
                 val geocoder = Geocoder(context, Locale.getDefault())
                 try{
                     var list: List<Address> = geocoder. getFromLocation(location.getLatitude(), location.getLongitude(), 1)
                     if(list != null && list.size > 0){
                         var address : Address = list.get(0) as Address
                         result = "${address. getAddressLine(0)}  , ${address.getLocality()}"
                     }
                 }catch(e: IOException){
                     Log.d("Egor", "Подключение к геокодеру не установлено: $e.message")
             }
             }).run()
         thread.start()
         return result
         }
    }

请求位置的权限在 Manifest 中指定:

<uses-permission android:name = "android.permission.ACCESS_COARSE_LOCATION"/>

我的问题是我不知道如何获取具有当前位置的 Location 对象以传递给 Geocoder。我尝试了不同的选项(例如,fusedLocationClient),但没有任何效果。

class MainActivity : AppCompatActivity(), DataProcessingCallback {
\\ 
lateinit var locationData: LocationDataInterface
\\
override fun onCreate(savedInstanceState: Bundle?) {
locationData = LocationData()
val e = locationData.getAdreesTown(Location(LocationManager.NETWORK_PROVIDER), this)
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
        fusedLocationClient.lastLocation.addOnSuccessListener { location : Location? ->
            locationNow = location
        }
        val e = locationData.getAdreesTown(location, this)

如何使用当前位置创建位置对象?

标签: androidkotlinlocationgeocoder

解决方案


推荐阅读