Android封装高德地图定位工具类Util的方法
发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,这篇文章主要介绍了Android封装高德地图定位工具类Util的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android封装高德地图定位工具类Util的方法文章都
千家信息网最后更新 2024年11月30日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安全错误
数据库的锁怎样保障安全
修改mql数据库名
奥的斯服务器
网络技术服务公司怎么注册
模拟城市下载软件开发
重庆开县食堂配送软件开发
高三网络技术应用知识点视频
2016最新网络安全事件
泉州软件开发小颜
语音聊天软件开发的大品牌
我的世界海贼服务器号码
手机数据库app推荐
农行软件开发西安
access数据库读取占用
中搜网络技术有限公司网页
开展网络安全技术检测
山东他虎哥网络技术有限公司
飞机的性能数据库
我的世界2b2t手游服务器地址
网络安全审计系统价格
软件开发 6%
长沙软件开发公司都有哪些
如何让c#连接数据库
软件开发回款
宝马f系列数据库
系统管理应用管理数据库管理
2018公需课 网络安全
服务器电脑怎么设置自动关机
四川网联互通网络技术有限公司
列举你了解的网络技术
电力网络安全标语