1、要实现高德地图的定位,首先要下载高德地图的SDK以及高德地图定位的SDK
下载地址:http://lbs.amap.com/api/android-sdk/download/
http://lbs.amap.com/api/android-location-sdk/download/
然后注册账号后到控制台应用管理—–>添加应用—->添加key
获取到自己的key值
获取key的具体方法在官网上可以找到就不多做解释了
http://lbs.amap.com/
2、通过解压得到.Jar文件并放到libs文件中,手动添加到依赖库中(右键Add—-)

3、如果你的地图SDK是3D的需要在main中创建 jniLibs 文件夹并把你解压出来的其他文件放到此处
4、开发环境已经配置好了,接下来就是敲代码了

在工程的“ AndroidManifest.xml ”文件添加key

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

添加服务,每个工程都有属于自己的service
<service android:name="com.amap.api.location.APSService"/>
添加所要用到的权限(我这里是在官网上复制的,可能会有重复的)

 //地图包、搜索包需要的基础权限<!--允许程序打开网络套接字--><uses-permission android:name="android.permission.INTERNET" /><!--允许程序设置内置sd卡的写权限--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!--允许程序获取网络状态--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!--允许程序访问WiFi网络信息--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!--允许程序读写手机状态和身份--><uses-permission android:name="android.permission.READ_PHONE_STATE" /><!--允许程序访问CellID或WiFi热点来获取粗略的位置--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 <!--用于进行网络定位--><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><!--用于申请调用A-GPS模块--><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission><!--用于申请获取蓝牙信息进行室内定位--><uses-permission android:name="android.permission.BLUETOOTH"></uses-permission><uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>

到此你的Manifest.xml就配置好了

接下来开始写布局文件

<com.amap.api.maps.MapViewandroid:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent"></com.amap.api.maps.MapView>

接下来就是MainActivity中的代码逻辑了

public class MainActivity extends AppCompatActivity implements LocationSource,AMapLocationListener{private MapView mMapView = null;//AMap是地图对象private AMap aMap;private MapView mapView;//声明AMapLocationClient类对象,定位发起端private AMapLocationClient mLocationClient = null;//声明mLocationOption对象,定位参数public AMapLocationClientOption mLocationOption = null;//声明mListener对象,定位监听器private OnLocationChangedListener mListener = null;//标识,用于判断是否只显示一次定位信息和用户重新定位private boolean isFirstLoc = true;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取地图控件引用mMapView = (MapView) findViewById(R.id.map);//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理mMapView.onCreate(savedInstanceState);if (aMap == null) {aMap = mMapView.getMap();//设置显示定位按钮 并且可以点击UiSettings settings = aMap.getUiSettings();aMap.setLocationSource(this);//设置了定位的监听// 是否显示定位按钮settings.setMyLocationButtonEnabled(true);aMap.setMyLocationEnabled(true);//显示定位层并且可以触发定位,默认是flase}//开始定位location();}
 private void location() {//初始化定位mLocationClient = new AMapLocationClient(getApplicationContext());//设置定位回调监听mLocationClient.setLocationListener(this);//初始化定位参数mLocationOption = new AMapLocationClientOption();//设置定位模式为Hight_Accuracy高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置是否返回地址信息(默认返回地址信息)mLocationOption.setNeedAddress(true);//设置是否只定位一次,默认为falsemLocationOption.setOnceLocation(false);//设置是否强制刷新WIFI,默认为强制刷新mLocationOption.setWifiActiveScan(true);//设置是否允许模拟位置,默认为false,不允许模拟位置mLocationOption.setMockEnable(false);//设置定位间隔,单位毫秒,默认为2000msmLocationOption.setInterval(2000);//给定位客户端对象设置定位参数mLocationClient.setLocationOption(mLocationOption);//启动定位mLocationClient.startLocation();}
 @Overrideprotected void onDestroy() {super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理mMapView.onDestroy();mLocationClient.stopLocation();//停止定位mLocationClient.onDestroy();//销毁定位客户端。}@Overrideprotected void onResume() {super.onResume();//在activity执行onResume时执行mMapView.onResume (),实现地图生命周期管理mMapView.onResume();}@Overrideprotected void onPause() {super.onPause();//在activity执行onPause时执行mMapView.onPause (),实现地图生命周期管理mMapView.onPause();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),实现地图生命周期管理mMapView.onSaveInstanceState(outState);}

下面就是实现接口以后重写的方法

 @Overridepublic void onLocationChanged(AMapLocation aMapLocation) {if (aMapLocation != null) {if (aMapLocation.getErrorCode() == 0) {//定位成功回调信息,设置相关消息aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见官方定位类型表aMapLocation.getLatitude();//获取纬度aMapLocation.getLongitude();//获取经度aMapLocation.getAccuracy();//获取精度信息SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date(aMapLocation.getTime());df.format(date);//定位时间aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。aMapLocation.getCountry();//国家信息aMapLocation.getProvince();//省信息aMapLocation.getCity();//城市信息aMapLocation.getDistrict();//城区信息aMapLocation.getStreet();//街道信息aMapLocation.getStreetNum();//街道门牌号信息aMapLocation.getCityCode();//城市编码aMapLocation.getAdCode();//地区编码// 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置if (isFirstLoc) {//设置缩放级别aMap.moveCamera(CameraUpdateFactory.zoomTo(17));//将地图移动到定位点aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude())));//点击定位按钮 能够将地图的中心移动到定位点mListener.onLocationChanged(aMapLocation);//添加图钉//  aMap.addMarker(getMarkerOptions(amapLocation));//获取定位信息StringBuffer buffer = new StringBuffer();buffer.append(aMapLocation.getCountry() + ""+ aMapLocation.getProvince() + ""+ aMapLocation.getCity() + ""+ aMapLocation.getProvince() + ""+ aMapLocation.getDistrict() + ""+ aMapLocation.getStreet() + ""+ aMapLocation.getStreetNum());Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show();isFirstLoc = false;}} else {//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。Log.e("AmapError", "location Error, ErrCode:"+ aMapLocation.getErrorCode() + ", errInfo:"+ aMapLocation.getErrorInfo());Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG).show();}}}@Overridepublic void activate(OnLocationChangedListener onLocationChangedListener) {mListener = onLocationChangedListener;}@Overridepublic void deactivate() {mListener = null;}

好了,这就可以实现高德导航的定位了

注意问题:
1、如果你的工程包名与key绑定的包名不一致时,需要在build.gradle中进行改动

 defaultConfig {applicationId "与key绑定的包名"minSdkVersion 17targetSdkVersion 26versionCode 1versionName "1.0"

就是图中PackageName要与applicationId一致

2、需要在真机上测试时,记得给你的应用添加定位权限,手机上的授权管理
3、还有其他问题的话可以在下面的网址上查看(错误码参照表)
http://lbs.amap.com/api/android-sdk/guide/map-tools/error-code

高德地图定位的简单实现相关推荐

  1. vue简单使用高德地图定位

    1.获取key 我们需要到高德开放平台生成key 我这里选的是web端,提交后会生成一个key值 2.安装vue-amap npm install vue-amap --save 3.在项目main. ...

  2. 安卓开发 高德地图定位的封装 十分钟上手

    前言 地图作为开发中三方sdk中较常遇到的一项,集成起来并不麻烦但是不小心踩坑可能会浪费较多时间,如果项目中多处使用还容易造成代码大量冗余,今天我们来将高德地图定位功能集成一个功能化模块,只需两分钟应 ...

  3. Android MVVM框架搭建(八)高德地图定位、天气查询、BottomSheetDialog

    Android MVVM框架搭建(八)高德地图定位.天气查询.BottomSheetDialog 前言 正文 一.集成SDK 二.基础配置 ① 权限配置 ② 配置Key 三.显示地图 ① MapFra ...

  4. 高德地图定位拖动改变位置

    现在关于地图使用越来越多,相信大家可能都或多或少的用到过,本篇文章简单总结了一下关于高德地图定位且可以拖动改变位置的功能的实现. 首先按照高德开发文档,导入jar包,申请key,可以在高德地图的开放平 ...

  5. vue项目使用高德地图定位当前地址

    vue项目使用高德地图定位当前地址 一.在项目中安装vue-amap插件 二.页面代码 三.data数据 一.在项目中安装vue-amap插件 1.最终效果 2.安装命令 npm install vu ...

  6. Android实现高德地图定位详细流程

     要实现高德地图定位呢,首先需要做好以下几步准备:  如果你嫌笔者写的不好或者懒得看,只需要代码的话,请选择: github:点击打开链接,此连接可能和文章内容有所出入,因为我可能会做后期的开发使用. ...

  7. flutter 获取定位_10分钟让你的flutter程序拥有定位功能--集成高德地图定位指南...

    地图定位这个功能目前基本上是商业应用app的标配.然而,在flutter中进行原生功能的开发,意味着必须的ios和android双端都通,而且需要大量的调试时间.尤其目前这个时间点,flutter的版 ...

  8. 【VUE】vue-amap高德地图定位以及文本标注

    vue-amap高德地图定位以及文本标注 因要求需实现在地图的定位以及该定位的文本标注,所有我看了一下实现的方式有哪些.最后选择了用现成的 vue-amap高德组件 去实现. 实现效果如图: 实现过程 ...

  9. flutter 获取定位_从头开发一个Flutter插件(二)高德地图定位插件

    在上一篇文章从头开发一个Flutter插件(一)开发流程里具体介绍了flutter插件的具体开发流程,从创建项目到发布.接下来将会为Flutter天气项目开发一个基于高德定位sdk的flutter定位 ...

最新文章

  1. linux maps,linux下/proc/pid/maps和pmap命令详解
  2. 精致3D图片切换效果,最适合企业产品展示
  3. PowerDesigner使用总结(转)
  4. 字节跳动P0级事故:实习生删除GB以下所有模型,直接上了今日头条......
  5. 全球及中国多非利特行业规模预测与前景运营模式分析报告2022-2027年版
  6. fedora 35 安装各种桌面环境命令整理
  7. Kubernetes要成为一个企业友好平台,到底还缺啥?
  8. mysql设置用户永不过期_在Navicat Premium中管理MySQL用户 - 第2部分:创建新用户
  9. TensorFlow tf.keras.layers.Lambda
  10. Anagram Groups(字符串)
  11. python使用redis做缓存_python实现类redis缓存
  12. oc21--super
  13. hbuilder新建web apk项目_【CUCS】Ionic利用你喜欢的(html css js) web技术创建跨平台的移动app...
  14. everything开启服务器功能
  15. wordpress博客加载缓慢解决:去除Open Sans和Lato 字体
  16. Maven中的dependencyManagement 详解
  17. vue3.0项目打包后,由于vender.js 文件过大引起的首页加载时间缓慢的解决方式
  18. 破解携程中文验证码爬取机票价格数据
  19. 关于wlw(windows live writer):“无法连接到您的日志服务:服务器响应无效”的解决方案
  20. PHP 中的设计模式详解

热门文章

  1. POJ1753(枚举)
  2. 打包docker镜像推送到远程服务器并部署到k8s
  3. 详解matlab均衡算法equalize()
  4. cf 1324D. Pair of Topics
  5. 一个去除pdf回车符的网页
  6. UITableViewCell中嵌套UITableView,用UITextView加载HTML数据
  7. 狂肝10个月手搓GPU,他们在《我的世界》里面玩《我的世界》
  8. 微信小程序九宫格布局
  9. 使用Python下载flbook.com.cn电子书
  10. Androidstudio集成Butterknife后get和set方法不能用了处理办法(java.lang.IllegalArgumentException: cannot add an acti)