千家信息网

Android封装高德地图定位工具类Util的方法

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要介绍了Android封装高德地图定位工具类Util的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android封装高德地图定位工具类Util的方法文章都
千家信息网最后更新 2025年02月01日Android封装高德地图定位工具类Util的方法

这篇文章主要介绍了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安全错误 数据库的锁怎样保障安全 在哪里查看镜像服务器的网关 广州市教育信息中心电教馆服务器 网络管理与网络安全 网络安全工作领导批示 福田区网络技术转移郑重承诺 互联网母服务器 蓝点系统数据库如何安装 尔坂服务器 宁城县云梦网络技术服务中心 北京运维管理软件开发方案 sql数据库sa密码文件 河北乐亿橙网络技术有限公司 织梦数据库批量修改安全码 网络安全防护特点 凤翔天气预报软件开发 我的世界手机版冒险服务器 数据库io瓶颈优化 怎么样搭建一个本地服务器 济南联想服务器哪家是专业做的 日本软件开发详细设计 税务网络安全貝体 游戏软件开发要求 宁津自然资源局网络安全 金融网络安全周宣传活动总结 电力网络安全宣传报道稿 服务器主板可以用1050显卡吗 将数据库表格导成csv格式 软件开发行业的困难 泉山区海航软件开发答疑解惑 怎么样搭建一个本地服务器
0