第一步:添加高德定位SDK依赖,导入框架有两种方式,第一种是可以到高德开放平台高德开放平台 | 高德地图API下载相关的jar包,然后将jar包放在项目的libs文件下,然后点击以依赖库的形式添加到项目中;第二种是直接通过添加依赖的形式远程下载相关的文件:

implementation files('libs\\AMap_Location_V5.6.1_20211115.jar')

在安卓8之后,权限的申请分为静态申请和动态申请两种,使用定位功能需要获取设备的位置信息权限,安卓8之后位置信息权限不能通过静态申请的方式获得,这就需要进行动态申请位置信息权限:

首先需要在配置文件中添加以下必要权限:

 <uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

然后在Activity中进行权限获取情况进行判断,在没有获得位置信息权限的情况下需要进行权限申请:

     /*** 定位需要的权限*/private String[] permissions = new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS};private static final int OPEN_SET_REQUEST_CODE = 100;//先进行权限申请情况判断,没有权限申请权限if (lacksPermission(permissions)) {ActivityCompat.requestPermissions(this, permissions, OPEN_SET_REQUEST_CODE);} else {Log.i("LoginActivity", "");}//判断是否获取权限public boolean lacksPermission(String[] permissions) {for (String permission : permissions) {//判断是否缺少权限,true=缺少权限if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {return true;}}return false;}

在使用定位SDK前需要将从高德开发平台申请到的key放到配置文件中的application层级下:

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

在使用任何一个SDK接口前都需要进行以下两个配置(这个非常重要,不做配置将无法使用定位功能):

  AMapLocationClient.updatePrivacyShow(getApplicationContext(), true, true);AMapLocationClient.updatePrivacyAgree(getApplicationContext(), true);

最后定位功能可实现的一个LocationSrvice中,并实现位置信息监听接口,然后重写onLocationChanged方法,在方法中即可获取到位置信息,并对位置信息进行解析,比如解析成城市街道门牌号数据。注意需要在onDestroy()方法中进行资源释放:注销掉定位客户端。

public class LocationService extends Service implements AMapLocationListener {private final String TAG = "LocationService";private AMapLocationClient aMapLocationClient = null;@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {startLocation();return super.onStartCommand(intent, flags, startId);}/*** 配置定位服务参数** @param start true表示开启定位服务 false表示销毁定位服务*/private void locationConfigure(boolean start) {if (start) {Log.i(TAG, "aMapLocation:开启定位服务");try {aMapLocationClient = new AMapLocationClient(getApplicationContext());} catch (Exception e) {e.printStackTrace();}//设置定位回调监听,这里要实现AMapLocationListener接口,AMapLocationListener接口只有onLocationChanged方法可以实现,用于接收异步返回的定位结果,参数是AMapLocation类型。aMapLocationClient.setLocationListener(this);//初始化定位参数AMapLocationClientOption aMapLocationClientOption = new AMapLocationClientOption();//设置定位模式为Hight_Accuracy高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式aMapLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置是否返回地址信息(默认返回地址信息)aMapLocationClientOption.setNeedAddress(true);//设置是否只定位一次,默认为falseaMapLocationClientOption.setOnceLocation(false);//设置是否强制刷新WIFI,默认为强制刷新aMapLocationClientOption.setWifiActiveScan(true);//设置是否允许模拟位置,默认为false,不允许模拟位置aMapLocationClientOption.setMockEnable(false);//设置定位间隔,单位毫秒,半小时定位一次aMapLocationClientOption.setInterval(1000 * 60 * 30);//给定位客户端对象设置定位参数aMapLocationClient.setLocationOption(aMapLocationClientOption);//启动定位aMapLocationClient.startLocation();} else {if (aMapLocationClient != null) {aMapLocationClient.onDestroy();Log.i(TAG, "aMapLocation:关闭定位服务");}}}/*** 位置信息** @param aMapLocation 具体位置信息对象*/@Overridepublic void onLocationChanged(AMapLocation aMapLocation) {if (aMapLocation != null) {if (aMapLocation.getErrorCode() == 0) {String device_addr = aMapLocation.getCountry()//国家信息+ aMapLocation.getProvince()//省份信息+ aMapLocation.getCity()//城市信息+ aMapLocation.getDistrict()//区信息+ aMapLocation.getStreet()//街道信息+ aMapLocation.getStreetNum();//门牌号信息Log.i(TAG, "设备定位成功,设备所在位置:" + device_addr);} else {Log.e(TAG, "设备定位失败-》》》》》》错信息-》》》》" + aMapLocation.getErrorCode() + ", 错误信息:" + aMapLocation.getErrorInfo());}}}@Overridepublic void onDestroy() {locationConfigure(false);super.onDestroy();}

在使用高德SDK的过成功,出现一些异常SDK都会通过日志告诉我们,在遇到异常的时候只需要根据错误代码前往高德开放平台高德开放平台 | 高德地图API找到对应的问题,进行具体问题具体解决即可。

Android开发集成高德定位SDK实现定位功能。相关推荐

  1. Android中集成高德地图SDK实现地图定位和导航功能(一)

    一.前期准备工作 1.在高德地图开发者平创建一个自己的项目 名称和应用类型随便填 2.添加Key 1.添加key 2.获取SHA1值 2.1.使用windwos+R 输入cmd 打开控制窗口 输入 w ...

  2. Android中集成高德地图SDK实现地图定位和导航功能(二)

    我们接着上一篇文章开始继续实现android中集成高德地图的SDK实现地图 定位,搜索,导航的功能 如何让地图在手机上实现呢? 1.配置AndroidManifest 中的权限申请 可以参考官方文档 ...

  3. Android开发-使用高德地图SDK实现仿钉钉打卡的功能

    前 言 LBS(基于地理位置服务)是当前移动互联网大部分应用不可或缺的功能,基于地理位置服务的Android平台的开发是主要用于Android系统作为载体,我们可以利用定位出的位置进行许多丰富多彩的操 ...

  4. Android开发实现高德地图定位详解

     一. 要实现高德地图定位呢,首先需要做好以下几步准备: 1. 在高德开放平台注册帐号 注册地址:http://lbs.amap.com 2. 在开发中下载Android平台下的地图SDK和定位S ...

  5. Android开发之高德API篇:2、高德API线路规划

    TIME:2020年7月6日 2.高德API线路规划----步行线路规划 前言: step1 工程配置 step2 整体实现过程 step3 具体实现过程 总结 附上源码 前言: 该篇博客主要是介绍高 ...

  6. 在一个空的Eclipse中安装Android开发的ADT和SDK

    在一个空的Eclipse中安装Android开发的ADT和SDK 一.eclipse中安装adt插件(http://jingyan.baidu.com/article/8cdccae99b564a31 ...

  7. 【QA】集成高德地图SDK闪退问题

    集成高德地图SDK闪退问题 昨天集成高德地图SDK,地图显示正常,但是点击返回键退出地图的时候,程序闪退,排查发现销毁地图时调用,mapView.onDestroy() 闪退,不调用的话内存溢出,这. ...

  8. Android旋转视频工具类,Android开发实现的IntentUtil跳转多功能工具类【包含视频、音频、图片、摄像头等操作功能】...

    本文实例讲述了Android开发实现的IntentUtil跳转多功能工具类.分享给大家供大家参考,具体如下: 说明:此工具类是本人开发中总结下来的,还有其它的跳转亲给我留言,希望大家一起把这个工具类打 ...

  9. android实现新闻内容显示功能,Android开发实现自定义新闻加载页面功能实例

    本文实例讲述了Android开发实现自定义新闻加载页面功能.分享给大家供大家参考,具体如下: 一.概述: 1.效果演示: 2.说明:在新闻页面刚加载的时候,一般会出现五种状态 未知状态(STATE_U ...

最新文章

  1. qooxdoo学习笔记一
  2. 用javascript实现以下功能!_模电小实验:用三极管实现触摸开关功能
  3. 前端开发总结--之关于FusionSphere WEBUI的想法
  4. 使用WEUI uploader上传图片
  5. OpenSceneGraph 笔记–如何导出三角形数据
  6. 为view添加约束constraints
  7. windows远程桌面无法拷贝文件的问题与解决方法
  8. 数学建模——确定性数学方法
  9. acunetix12及Awvs12.x安装
  10. 亮宁机器人套件_十大可编程机器人教育套件
  11. Droid razr xt910 tegra2 地牢猎人2 dungeon hunter2
  12. 【技巧总结】理解XXE从基础到盲打
  13. GDOI2017滚粗记
  14. Google战略的深远意义
  15. 什么是嵌入式服务器?为什么使用嵌入式服务器?
  16. 10种招聘数据的采集方法
  17. 小米电脑重装系统后亮度无法调节的解决办法
  18. 什么是软件测试,软件测试的目的?
  19. 路由器重温——WAN接入/互联-DCC配置管理2
  20. 汉寿计算机培训初中升高中,升高中前,这几类学生只需注意这些,就有机会成为学霸...

热门文章

  1. 优化方法理论合集(13)——可行域
  2. 程序员分界线:30岁,30岁转行、35岁转行、35岁被迫裁员
  3. P014魔改8G显存
  4. 【CC】| 创建三维模型教程
  5. CAN矩阵(入门篇)(史上最全)
  6. uniapp使用高德地图线路规划
  7. 蓝牙耳机南卡和JBL哪款好用?半入耳耳机南卡和JBL详细对比评测
  8. 电口以太网物理层一致性测试原理与过程
  9. 数据库 、数据仓库、数据集市的区别与联系
  10. 东北大学计算机学院生产实习,东北大学生产实习报告.doc