美文网首页
Android利用自带的位置服务,获取当前位置信息

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

作者: 饮水思源为名 | 来源:发表于2019-10-29 17:01 被阅读0次

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

    End

    笔者的Github Blog,希望各位大大提意见,点个star,谢谢
    传送门:WusyBlog

    求互粉互赞,互赞所有文章可以私聊我。哈哈,希望我们的原创文章能让更多朋友看到,一起变强。

    笔者新开通了微信公众号——饮水思源|wusy 计划持续运营,每日为您分享Android干货、原创文章。微信扫描下方的二维码关注我,开发学习路上不迷路。谢谢各位


    饮水思源|wusy.jpg

    相关文章

      网友评论

          本文标题:Android利用自带的位置服务,获取当前位置信息

          本文链接:https://www.haomeiwen.com/subject/dnrgvctx.html