Android 集成高德定位功能,获取经纬度,城市至门牌号码
老规矩,上效果图,先给你们看下效果:
虽然打上了马赛克,但是装到别人手机上还是看着很爽啊;
友善提醒:禁止用作非法用途
首先进入高德地图开放平台
先要下载高德的定位SDK包,这里就不演示了
1.----->进入控制台
2.----->最左侧应用管理
3.----->创建新应用
4.----->输入名字和用途
5.下载高德定位SDK,集成到AndroidStudio中
做完这些之后我们需要获得到 key,我们选取添加新key,然后输入我们的包名和SHA1值,官网推荐我们使用命令行去获取SHA1值,具体看官方文档 高德SHA1值获取,我使用的是在代码里获取当前程序使用的签名文件来获取SHA1值,然后拿到之后,再复制到高德开放平台
6.具体代码如下
public static String sHA1(Context context) {try {PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);byte[] cert = info.signatures[0].toByteArray();MessageDigest md = MessageDigest.getInstance("SHA1");byte[] publicKey = md.digest(cert);StringBuffer hexString = new StringBuffer();for (int i = 0; i < publicKey.length; i++) {String appendString = Integer.toHexString(0xFF & publicKey[i]).toUpperCase(Locale.US);if (appendString.length() == 1)hexString.append("0");hexString.append(appendString);hexString.append(":");}String result = hexString.toString();//result即为获取的SHA1值,如果最后面有冒号的话就去掉Log.i(TAG,result.toString());return result.substring(0, result.length()-1);} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return null;}
.然后需要在权限清单文件AndroidManifest的Application标签下面写上我们的key以及注册服务
<!--写在Application标签下,写我们自己的key--><meta-dataandroid:name="com.amap.api.v2.apikey"android:value="029c736c9e52ac293b933dd9ac0e69a7"></meta-data><service android:name="com.amap.api.location.APSService"></service>
8.当然还有一些权限
<!-- 地图包、搜索包需要的基础权限 --><!--用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission><!--用于访问GPS定位--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission><!--获取运营商信息,用于支持提供运营商信息相关的接口--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><!--用于访问wifi网络信息,wifi信息会用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission><!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission><!--用于访问网络,网络定位需要上网--><uses-permission android:name="android.permission.INTERNET"></uses-permission><!--用于读取手机当前的状态--><uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission><!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
9.然后就是我们MainActivity里面的代码了
我把他封装了两个方法,直接复制在MainActivity里面,然后需要用到的地方直接调用startLocaion()这个方法就可以
public void startLocaion(){mLocationClient = new AMapLocationClient(getApplicationContext());mLocationClient.setLocationListener(mLocationListener);mLocationOption = new AMapLocationClientOption();//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置是否返回地址信息(默认返回地址信息)mLocationOption.setNeedAddress(true);//获取一次定位结果://该方法默认为false。mLocationOption.setOnceLocation(true);//设置是否允许模拟位置,默认为false,不允许模拟位置mLocationOption.setMockEnable(false);//给定位客户端对象设置定位参数mLocationClient.setLocationOption(mLocationOption);//启动定位mLocationClient.startLocation();}//声明定位回调监听器public AMapLocationListener mLocationListener = new AMapLocationListener() {@Overridepublic void onLocationChanged(AMapLocation amapLocation) {if (amapLocation !=null ) {if (amapLocation.getErrorCode() == 0) {//定位成功回调信息,设置相关消息Log.i(TAG,"当前定位结果来源-----"+amapLocation.getLocationType());//获取当前定位结果来源,如网络定位结果,详见定位类型表Log.i(TAG,"纬度 ----------------"+amapLocation.getLatitude());//获取纬度Log.i(TAG,"经度-----------------"+amapLocation.getLongitude());//获取经度Log.i(TAG,"精度信息-------------"+amapLocation.getAccuracy());//获取精度信息Log.i(TAG,"地址-----------------"+amapLocation.getAddress());//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。Log.i(TAG,"国家信息-------------"+amapLocation.getCountry());//国家信息Log.i(TAG,"省信息---------------"+amapLocation.getProvince());//省信息Log.i(TAG,"城市信息-------------"+amapLocation.getCity());//城市信息Log.i(TAG,"城区信息-------------"+amapLocation.getDistrict());//城区信息Log.i(TAG,"街道信息-------------"+amapLocation.getStreet());//街道信息Log.i(TAG,"街道门牌号信息-------"+amapLocation.getStreetNum());//街道门牌号信息Log.i(TAG,"城市编码-------------"+amapLocation.getCityCode());//城市编码Log.i(TAG,"地区编码-------------"+amapLocation.getAdCode());//地区编码Log.i(TAG,"当前定位点的信息-----"+amapLocation.getAoiName());//获取当前定位点的AOI信息} else {//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。Log.e("AmapError", "location Error, ErrCode:"+ amapLocation.getErrorCode() + ", errInfo:"+ amapLocation.getErrorInfo());}}}};
10.现在我们就已经完成了.如果是6.0以上的手机还要动态去申请定位权限,8.0以上可能也会有问题,具体看下高德官方文档吧,6.0动态申请定位权限我写在了下一篇博客Android 6.0权限管理以及动态申请,以定位权限为例
Android 集成高德定位功能,获取经纬度,城市至门牌号码相关推荐
- vue怎么获取用户的位置经纬度_vue 实现Web端的定位功能 获取经纬度
首先我这里的需求呢, 是获取当前用户的经纬度 经过无数次的测试, 先后用了 腾讯/百度地图的api,最后绝对还是高德的js APi 废话不多说, 直接上代码. 首先在 index.html 里面 引入 ...
- android 高德地图定位圈,android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)...
Android开发项目时常常会遇到定位这个功能, 很久以前写过一篇了,官方也更新了一些东西,我也更新下 以前使用的是jar包 导入来实现高德定位 现在通过Gradle集成SDK(也可以使用jar包) ...
- android高德定位sdk,android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)...
/*** * 定位*/ private voidshowLocation() {try{ mlocationClient= new AMapLocationClient(this); mLocatio ...
- html5经纬度定位 源码_利用HTML5定位功能获取经纬度,在根据经纬度利用百度地图获取位置信息...
一.引入相关js 二.js代码 // 单次位置请求执行的函数 function getLocation(){ navigator.geolocation.getCurrentPosition(mapI ...
- 利用百度地图Android定位SDK获取经纬度
环境的搭建(参考上一次的文章) 百度地图Android定位SDK的使用 2.在Android studio里设计程序来获取经纬度 界面布局activity_main.xml文件的源代码: <?x ...
- Android集成百度定位以及导航详解
Android集成百度定位以及导航详解 百度地图Android SDK 官方下载地址: 包括类参考.示例代码 ...
- android获得图片的坐标,Android百度地图定位后获取周边位置的实现代码
本文实例讲解Android百度地图定位后获取周边位置的实现代码,分享给大家供大家参考,具体内容如下 效果图: 具体代码: 1.布局文件 android:orientation="vertic ...
- Android集成百度定位,超详细,拒绝坑,附demo!!!
众所周知,百度地图作为定位,地图,导航界的大佬之一,我们的项目中有这方面的需求,百度地图集成也是个不错的选择. 百度地图集成成本极低,首先,它免费,官网文档清晰,demo明确,但还是有很多人要才坑,正 ...
- Android开发集成高德定位SDK实现定位功能。
第一步:添加高德定位SDK依赖,导入框架有两种方式,第一种是可以到高德开放平台高德开放平台 | 高德地图API下载相关的jar包,然后将jar包放在项目的libs文件下,然后点击以依赖库的形式添加到项 ...
最新文章
- java 进程通信框架,MediatR-进程内的消息通信框架
- pmp考试必知的十个图和表
- windowsphone开发_APP软件开发用哪些软件比较好
- python画饼状图的包_Python数据可视化:画饼状图、折线图、圈图
- 柳青:2017,滴滴实现规模增长和修炼内功的一年
- Qt 解决MySQL 中文乱码问题
- VTK:3DArray用法实战
- JWTToken超时刷新策略
- 计算机硬件技术基础 统计字符串strl中字符'a'的个数,汕头大学工学院830计算机基础综合历年考研真题202p.doc...
- XSS绕过与防御总结
- 【qt】QWS和 QPA
- 宋宝华: 纪念金庸先生——程序员的武侠世界
- 8-1 职场价值塑造-摆脱低价值瓶颈,展示高价值收获新机会
- 洛谷P1205JAVA题解
- html+css实现三角形的三种方法
- 简洁,简单,再简化...
- 计算机速成课 第二十四集 冷战和消费主义
- pandas笔记1 --pandas处理mat表格文件
- 公有云托管K8s服务百花齐放,企业如何统一纳管、便捷管理?
- 李开复创新工厂超级详细面经(附答案)