Android封装高德地图定位工具类Util的方法
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,这篇文章主要介绍了Android封装高德地图定位工具类Util的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android封装高德地图定位工具类Util的方法文章都
千家信息网最后更新 2025年11月13日Android封装高德地图定位工具类Util的方法第二步 通过Gradle集成SDK(方便):
第三步 配置参数
第四步 获取定位数据
这篇文章主要介绍了Android封装高德地图定位工具类Util的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android封装高德地图定位工具类Util的方法文章都会有所收获,下面我们一起来看看吧。
第一步、去官网创建高德Key

带*号的填完后,点击提交,获取SHA1值如下(通过代码获取的)或者通过命令行获取,两者都行。
Android studio代码获取SHA1值
调用 Log.e("-->打印sha1 ","${sha1(this)}")fun sha1(context: Context): String { try { val info: PackageInfo = context.packageManager.getPackageInfo( context.packageName, PackageManager.GET_SIGNATURES) val cert: ByteArray = info.signatures.get(0).toByteArray() val md: MessageDigest = MessageDigest.getInstance("SHA1") val publicKey: ByteArray = md.digest(cert) val hexString = StringBuffer() for (i in publicKey.indices) { val appendString = Integer.toHexString(0xFF and publicKey[i].toInt()) .toUpperCase(Locale.US) if (appendString.length == 1) hexString.append("0") hexString.append(appendString) hexString.append(":") } val result = hexString.toString() return result.substring(0, result.length - 1) } catch (e: PackageManager.NameNotFoundException) { e.printStackTrace() } catch (e: NoSuchAlgorithmException) { e.printStackTrace() } return "" }第二步 通过Gradle集成SDK(方便):
1、在Project的build.gradle文件中配置repositories,添加maven或jcenter仓库地址:
allprojects { repositories { jcenter() // 或者 mavenCentral() } }2、在主工程的build.gradle文件配置dependencies
//定位 implementation "com.amap.api:location:latest.integration"
第三步 配置参数
第1步,配置AndroidManifest.xml
请在application标签中声明service组件,每个app拥有自己单独的定位service。
第2步,声明权限 如果项目中已有其中的权限,那就不用加了
第3步,设置高德Key:
//开发者申请的key
第四步 获取定位数据
在需要获取经纬度的页面调用如下代码:
private var amapLocationUtil: AmapLocationUtil? = null fun initLocationOption() { if (null == amapLocationUtil) { amapLocationUtil = AmapLocationUtil(CommApplication.getApplication()) } amapLocationUtil!!.initLocation() amapLocationUtil!!.startLocation() amapLocationUtil!!.setOnCallBackListener { longitude, latitude, location, isSucdess, address -> //Log.e("--->", "longitude" + longitude + "" + "latitude" + latitude + "" + "isSucdess" + isSucdess + "" + "address" + address); //Log.e("--->",location.getProvince()+ "" +location.getCity()+""+location.getDistrict()); //isSucdess true 定位成功 false 失败 if (isSucdess) { } else { //定位失败,重试定位 amapLocationUtil!!.startLocation() } } }注意:如果是在当前Activity实例化的,不要忘了销毁
override fun onDestroy() { super.onDestroy() if (amapLocationUtil != null) { amapLocationUtil!!.destroyLocation() } }看到了代码里调用了AmapLocationUtil,这个是我封装好的一个工具类,方便调用,代码如下:
/** * * Created by JasonYin * Description:封装高德地图Util * */class AmapLocationUtil(privateval mContext: Context) { private var locationClient: AMapLocationClient? = null private var locationOption: AMapLocationClientOption? = null private var mOnCallBackListener: onCallBackListener? = null /** * 初始化定位 */ fun initLocation() { //初始化client if (null == locationClient) { locationClient = AMapLocationClient(mContext) } locationOption = defaultOption //设置定位参数 locationClient!!.setLocationOption(locationOption) // 设置定位监听 locationClient!!.setLocationListener(locationListener) }//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式 //可选,设置是否gps优先,只在高精度模式下有效。默认关闭 //可选,设置网络请求超时时间。默认为30秒。在仅设备模式下无效 //可选,设置定位间隔。默认为2秒 //可选,设置是否返回逆地理地址信息。默认是true //可选,设置是否单次定位。默认是false //可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用 //可选, 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP //可选,设置是否使用传感器。默认是false //可选,设置是否开启wifi扫描。默认为true,如果设置为false会同时停止主动刷新,停止以后完全依赖于系统刷新,定位位置可能存在误差 //可选,设置是否使用缓存定位,默认为true//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式 //可选,设置是否gps优先,只在高精度模式下有效。默认关闭 //如果网络可用就选择高精度 privateval defaultOption: AMapLocationClientOption private get() { val mOption = AMapLocationClientOption() //如果网络可用就选择高精度 if (NetworkUtils.isConnected()) { //可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式 mOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy mOption.isGpsFirst = true //可选,设置是否gps优先,只在高精度模式下有效。默认关闭 } else { mOption.locationMode = AMapLocationClientOption.AMapLocationMode.Device_Sensors //可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式 mOption.isGpsFirst = true //可选,设置是否gps优先,只在高精度模式下有效。默认关闭 } mOption.httpTimeOut = 30000 //可选,设置网络请求超时时间。默认为30秒。在仅设备模式下无效 mOption.interval = 2000 //可选,设置定位间隔。默认为2秒 mOption.isNeedAddress = true //可选,设置是否返回逆地理地址信息。默认是true mOption.isOnceLocation = false //可选,设置是否单次定位。默认是false mOption.isOnceLocationLatest = false //可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用 AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP) //可选, 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP mOption.isSensorEnable = true //可选,设置是否使用传感器。默认是false mOption.isWifiScan = true //可选,设置是否开启wifi扫描。默认为true,如果设置为false会同时停止主动刷新,停止以后完全依赖于系统刷新,定位位置可能存在误差 mOption.isLocationCacheEnable = true //可选,设置是否使用缓存定位,默认为true return mOption } var locationListener = AMapLocationListener { location -> val sb = StringBuilder() if (null != location) { //errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明 if (location.errorCode == 0) { longitude = location.longitude latitude = location.latitudeval district = location.district locationSuccess(longitude, latitude, true, location, district) //定位成功,停止定位:如果实时定位,就把stopLocation()关闭 stopLocation() } else { //定位失败// sb.append("定位失败" + "");// sb.append("错误码:" + location.getErrorCode() + "");// sb.append("错误信息:" + location.getErrorInfo() + "");// sb.append("错误描述:" + location.getLocationDetail() + "");// Log.e("---> 定位失败", sb.toString()); LocationFarile(false, location) } } else { LocationFarile(false, location) } } private fun LocationFarile(isSucdess: Boolean, location: AMapLocation) { if (mOnCallBackListener != null) { mOnCallBackListener!!.onCallBack(0.0, 0.0, location, false, "") } } fun locationSuccess(longitude: Double, latitude: Double, isSucdess: Boolean, location: AMapLocation?, address: String?) { if (mOnCallBackListener != null) { mOnCallBackListener!!.onCallBack(longitude, latitude, location, true, address) } } fun setOnCallBackListener(listener: onCallBackListener?) { mOnCallBackListener = listener } interface onCallBackListener { fun onCallBack(longitude: Double, latitude: Double, location: AMapLocation?, isSucdess: Boolean, address: String?) } /** * 开始定位 */ fun startLocation() { locationClient!!.startLocation() } /** * 停止定位 */ fun stopLocation() { locationClient!!.stopLocation() } /** * 销毁定位 */ fun destroyLocation() { if (null != locationClient) { /** * 如果AMapLocationClient是在当前Activity实例化的, * 在Activity的onDestroy中一定要执行AMapLocationClient的onDestroy */ locationClient!!.onDestroy() locationClient = null locationOption = null } } companion object { var longitude = 0.0 var latitude = 0.0 }}关于"Android封装高德地图定位工具类Util的方法"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"Android封装高德地图定位工具类Util的方法"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
定位
模式
网络
高精
高精度
高德
封装
设备
地图
工具
代码
方法
有效
有高
精度
错误
配置
成功
信息
地址
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库的应用与管理叶潮流
深度学习数据库
软件开发php题目
软件开发学物理
软件开发工程师门槛高么
做华为服务器投资多少钱
安全服务器接入地址是什么
支付宝网络技术划款入公司
怀旧服五区服务器都有哪些
奇迹暖暖 只看数据库
苏州美旺网络技术服务
湖南国瑞软件开发有限公司
北京一家做网络安全的公司
西北大学计算机网络安全
数据库中什么是分布式事务
关于征集网络安全的歌
成都微仔网络技术
云狐软件开发
视频服务器收费
西宁鲲鹏服务器
中兴做服务器的是干嘛的
不良网络安全员招聘最新
丰都实验小学网络安全
美萍餐饮管理连不上服务器
传奇4国际版服务器
温州宣传部网络安全专家
dos命令连接远程数据库
吉林存储服务器机箱价格
汕尾通讯软件开发销售厂
txt 文件如何导入数据库