Android封装高德地图定位工具类Util的方法(android,util,移动开发)

时间:2024-05-04 12:46:25 作者 : 石家庄SEO 分类 : 移动开发
  • TAG :

第一步、去官网创建高德Key

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

带*号的填完后,点击提交,获取SHA1值如下(通过代码获取的)或者通过命令行获取,两者都行。

Android studio代码获取SHA1值

调用Log.e("-->打印sha1","${sha1(this)}")funsha1(context:Context):String{try{valinfo:PackageInfo=context.packageManager.getPackageInfo(context.packageName,PackageManager.GET_SIGNATURES)valcert:ByteArray=info.signatures.get(0).toByteArray()valmd:MessageDigest=MessageDigest.getInstance("SHA1")valpublicKey:ByteArray=md.digest(cert)valhexString=StringBuffer()for(iinpublicKey.indices){valappendString=Integer.toHexString(0xFFandpublicKey[i].toInt()).toUpperCase(Locale.US)if(appendString.length==1)hexString.append("0")hexString.append(appendString)hexString.append(":")}valresult=hexString.toString()returnresult.substring(0,result.length-1)}catch(e:PackageManager.NameNotFoundException){e.printStackTrace()}catch(e:NoSuchAlgorithmException){e.printStackTrace()}return""}

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

第二步 通过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.0的定位需要加上这个--><serviceandroid:name="com.amap.api.location.APSService"></service>

第2步,声明权限 如果项目中已有其中的权限,那就不用加了

<!--用于进行网络定位--><uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission><!--用于访问GPS定位--><uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission><!--用于获取运营商信息,用于支持提供运营商信息相关的接口--><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><!--用于访问wifi网络信息,wifi信息会用于进行网络定位--><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"></uses-permission><!--用于获取wifi的获取权限,wifi信息会用来进行网络定位--><uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"></uses-permission><!--用于访问网络,网络定位需要上网--><uses-permissionandroid:name="android.permission.INTERNET"></uses-permission><!--用于读取手机当前的状态--><uses-permissionandroid:name="android.permission.READ_PHONE_STATE"></uses-permission><!--用于写入缓存数据到扩展存储卡--><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission><!--用于申请调用A-GPS模块--><uses-permissionandroid:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>

第3步,设置高德Key:

<meta-dataandroid:name="com.amap.api.v2.apikey"android:value="key">//开发者申请的key</meta-data>

第四步 获取定位数据

在需要获取经纬度的页面调用如下代码:

privatevaramapLocationUtil:AmapLocationUtil?=nullfuninitLocationOption(){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());//isSucdesstrue定位成功false失败if(isSucdess){}else{//定位失败,重试定位amapLocationUtil!!.startLocation()}}}

注意:如果是在当前Activity实例化的,不要忘了销毁

overridefunonDestroy(){super.onDestroy()if(amapLocationUtil!=null){amapLocationUtil!!.destroyLocation()}}

看到了代码里调用了AmapLocationUtil,这个是我封装好的一个工具类,方便调用,代码如下:

/****CreatedbyJasonYin*Description:封装高德地图Util**/classAmapLocationUtil(privatevalmContext:Context){privatevarlocationClient:AMapLocationClient?=nullprivatevarlocationOption:AMapLocationClientOption?=nullprivatevarmOnCallBackListener:onCallBackListener?=null/***初始化定位*/funinitLocation(){//初始化clientif(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优先,只在高精度模式下有效。默认关闭//如果网络可用就选择高精度privatevaldefaultOption:AMapLocationClientOptionprivateget(){valmOption=AMapLocationClientOption()//如果网络可用就选择高精度if(NetworkUtils.isConnected()){//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式mOption.locationMode=AMapLocationClientOption.AMapLocationMode.Hight_AccuracymOption.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//可选,设置是否返回逆地理地址信息。默认是truemOption.isOnceLocation=false//可选,设置是否单次定位。默认是falsemOption.isOnceLocationLatest=false//可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP)//可选,设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTPmOption.isSensorEnable=true//可选,设置是否使用传感器。默认是falsemOption.isWifiScan=true//可选,设置是否开启wifi扫描。默认为true,如果设置为false会同时停止主动刷新,停止以后完全依赖于系统刷新,定位位置可能存在误差mOption.isLocationCacheEnable=true//可选,设置是否使用缓存定位,默认为truereturnmOption}varlocationListener=AMapLocationListener{location->valsb=StringBuilder()if(null!=location){//errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明if(location.errorCode==0){longitude=location.longitudelatitude=location.latitudevaldistrict=location.districtlocationSuccess(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)}}privatefunLocationFarile(isSucdess:Boolean,location:AMapLocation){if(mOnCallBackListener!=null){mOnCallBackListener!!.onCallBack(0.0,0.0,location,false,"")}}funlocationSuccess(longitude:Double,latitude:Double,isSucdess:Boolean,location:AMapLocation?,address:String?){if(mOnCallBackListener!=null){mOnCallBackListener!!.onCallBack(longitude,latitude,location,true,address)}}funsetOnCallBackListener(listener:onCallBackListener?){mOnCallBackListener=listener}interfaceonCallBackListener{funonCallBack(longitude:Double,latitude:Double,location:AMapLocation?,isSucdess:Boolean,address:String?)}/***开始定位*/funstartLocation(){locationClient!!.startLocation()}/***停止定位*/funstopLocation(){locationClient!!.stopLocation()}/***销毁定位*/fundestroyLocation(){if(null!=locationClient){/***如果AMapLocationClient是在当前Activity实例化的,*在Activity的onDestroy中一定要执行AMapLocationClient的onDestroy*/locationClient!!.onDestroy()locationClient=nulllocationOption=null}}companionobject{varlongitude=0.0varlatitude=0.0}}
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Android封装高德地图定位工具类Util的方法的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:JavaScript如何识别各种浏览器及平台下一篇:

5 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18