前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android利用自带的位置服务,获取当前位置信息

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

作者头像
饮水思源为名
发布2019-11-04 16:28:12
3.1K0
发布2019-11-04 16:28:12
举报

笔者项目里,需要获取用户的当前位置信息,因为没有接地图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<Address>? = 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是个集合,他对你的当前位置做了不同维度的描述,越后面的,描述得越精确。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码与讲解:
  • 爬坑指南:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档