Android利用自带的位置服务,获取当前位置信息 您所在的位置:网站首页 android获取位置信息 Android利用自带的位置服务,获取当前位置信息

Android利用自带的位置服务,获取当前位置信息

2023-04-11 03:41| 来源: 网络整理| 查看: 265

笔者项目里,需要获取用户的当前位置信息,因为没有接地图SDK,打算用原生自带的位置服务去做。操作了一下,踩了几个大坑,总算是幸不辱命。这里做个记录,顺便分享给大家。

代码与讲解: /** * 初始化地理位置 */ @SuppressLint("MissingPermission") fun initLocation() { Thread(Runnable { val serviceString = Context.LOCATION_SERVICE// 获取的是位置服务 val locationManager = getSystemService(serviceString) as LocationManager val provider = LocationManager.NETWORK_PROVIDER// 指定LocationManager的定位方法 val location = locationManager.getLastKnownLocation(provider) var address = getAddress(location) runOnUiThread { tvLocation.text = address } }).start() } /** * 通过经纬度获取位置信息 */ private fun getAddress(location: Location?): String {//一定要异步,否则获取不到 //用来接收位置的详细信息 var result: List? = null var addressLine = "" try { if (location != null) { val gc = Geocoder(this, Locale.getDefault()) result = gc.getFromLocation(location.latitude, location.longitude, 1) if (result.isNotEmpty()) { try { addressLine = result[0].getAddressLine(0) + result[0].getAddressLine(1) } catch (e: java.lang.Exception) { addressLine = result[0].getAddressLine(0) } } } addressLine=addressLine.replace("null","") } catch (e: Exception) { e.printStackTrace() } return addressLine }

上面两个方法,就可以实现这个功能了,笔者通过tvLocation.text = address直接将位置信息渲染在界面上。朋友们如果只是想实现功能,代码copy进项目就OK,想要了解细节可以继续往下看。

爬坑指南:

1.initLocation()这个方法,可以看到笔者是放在线程里跑的,一定要这样做,否则拿到经纬度之后,无法通过经纬度获取到位置信息。笔者在这里纠结了许久。 2.在通过经纬度获取位置信息时,获取到的result是个集合,他对你的当前位置做了不同维度的描述,越后面的,描述得越精确。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有