前言

1、使用高德开放平台中的Android 定位SDK最新版本:v4.6.0

2、测试机型:魅蓝note2  系统5.1.1

华为荣耀畅玩7x  系统8.0.0

一、集成高德Android定位sdk

1、高德开发平台上注册账号,并且去“控制台”在“应用管理”按照提示创建需要高德定位的应用获取key值。

2、Android 定位SDK上在Android studio配置定位。

3、定位demo下载,将其中的定位jar包放置在你应用的libs文件夹中。

4、获取定位数据包括:AndroidManifest.xml配置、初始化定位、启动/停止定位、回调获取定位结果。

5、注意Android 8.0、Android 6.0权限说明。

6、高德Android 定位SDK错误码对照表。

二、正式封装

1、初始化定位。

private AMapLocationClientOption getDefaultOption() {AMapLocationClientOption mOption = new AMapLocationClientOption();mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式mOption.setGpsFirst(false);//可选,设置是否gps优先,只在高精度模式下有效。默认关闭mOption.setHttpTimeOut(30000);//可选,设置网络请求超时时间。默认为30秒。在仅设备模式下无效mOption.setInterval(2000);//可选,设置定位间隔。默认为2秒mOption.setNeedAddress(true);//可选,设置是否返回逆地理地址信息。默认是truemOption.setOnceLocation(false);//可选,设置是否单次定位。默认是falsemOption.setOnceLocationLatest(false);//可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP);//可选, 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTPmOption.setSensorEnable(false);//可选,设置是否使用传感器。默认是falsemOption.setWifiScan(true); //可选,设置是否开启wifi扫描。默认为true,如果设置为false会同时停止主动刷新,停止以后完全依赖于系统刷新,定位位置可能存在误差mOption.setLocationCacheEnable(true); //可选,设置是否使用缓存定位,默认为truemOption.setGeoLanguage(AMapLocationClientOption.GeoLanguage.DEFAULT);//可选,设置逆地理信息的语言,默认值为默认语言(根据所在地区选择语言)return mOption;}

2、启动定位,回调AMapLocationListener方法获取经纬度,并且通过rxjava传递相关数据。

 public void startLocalService() {//初始化定位mLocationClient = new AMapLocationClient(BaseApplication.getInstance());//设置定位回调监听mLocationOption = getDefaultOption();mLocationClient.setLocationOption(mLocationOption);mLocationClient.setLocationListener(location -> {if (null != location) {if (location.getErrorCode() == 0) {LocationBean locationBean = new LocationBean();locationBean.setLongitude(String.valueOf(LngUtils.decimalSix(location.getLongitude())));locationBean.setLatitude(String.valueOf(LngUtils.decimalSix(location.getLatitude())));RxBus.getDefault().post("GetLocation", locationBean);} else {Log.i("location<<<failed", "定位失败\n错误码:" + location.getErrorCode()+ "\n错误信息:" + location.getErrorInfo()+ "\n错误描述:" + location.getLocationDetail());}} else {ToastUtils.showMessage("定位失败,loc is null");}});mLocationClient.startLocation();}

3、停止定位,在Activity的onDestroy中一定要执行AMapLocationClient的onDestroy

 public void stopLocalService() {if (null != mLocationClient) {mLocationClient.onDestroy();mLocationClient.stopLocation();mLocationClient = null;mLocationOption = null;}}

4、完整代码

public class LocationUtils {@SuppressLint("StaticFieldLeak")private static AMapLocationClient mLocationClient;private AMapLocationClientOption mLocationOption = null;private static class LocationHolder {private static final LocationUtils INSTANCE = new LocationUtils();}public static LocationUtils getInstance() {return LocationHolder.INSTANCE;}public void startLocalService() {//初始化定位mLocationClient = new AMapLocationClient(BaseApplication.getInstance());//设置定位回调监听mLocationOption = getDefaultOption();mLocationClient.setLocationOption(mLocationOption);mLocationClient.setLocationListener(location -> {if (null != location) {if (location.getErrorCode() == 0) {LocationBean locationBean = new LocationBean();locationBean.setLongitude(String.valueOf(LngUtils.decimalSix(location.getLongitude())));locationBean.setLatitude(String.valueOf(LngUtils.decimalSix(location.getLatitude())));RxBus.getDefault().post("GetLocation", locationBean);} else {Log.i("location<<<failed", "定位失败\n错误码:" + location.getErrorCode()+ "\n错误信息:" + location.getErrorInfo()+ "\n错误描述:" + location.getLocationDetail());}} else {ToastUtils.showMessage("定位失败,loc is null");}});mLocationClient.startLocation();mLocationClient.setLocationListener(new AMapLocationListener() {@Overridepublic void onLocationChanged(AMapLocation aMapLocation) {}});}public void stopLocalService() {if (null != mLocationClient) {mLocationClient.onDestroy();mLocationClient.stopLocation();mLocationClient = null;mLocationOption = null;}}private AMapLocationClientOption getDefaultOption() {AMapLocationClientOption mOption = new AMapLocationClientOption();mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式mOption.setGpsFirst(false);//可选,设置是否gps优先,只在高精度模式下有效。默认关闭mOption.setHttpTimeOut(30000);//可选,设置网络请求超时时间。默认为30秒。在仅设备模式下无效mOption.setInterval(2000);//可选,设置定位间隔。默认为2秒mOption.setNeedAddress(true);//可选,设置是否返回逆地理地址信息。默认是truemOption.setOnceLocation(false);//可选,设置是否单次定位。默认是falsemOption.setOnceLocationLatest(false);//可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP);//可选, 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTPmOption.setSensorEnable(false);//可选,设置是否使用传感器。默认是falsemOption.setWifiScan(true); //可选,设置是否开启wifi扫描。默认为true,如果设置为false会同时停止主动刷新,停止以后完全依赖于系统刷新,定位位置可能存在误差mOption.setLocationCacheEnable(true); //可选,设置是否使用缓存定位,默认为truemOption.setGeoLanguage(AMapLocationClientOption.GeoLanguage.DEFAULT);//可选,设置逆地理信息的语言,默认值为默认语言(根据所在地区选择语言)return mOption;}
}

三、activity中调用使用

1、在activity中启动定位。

 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);LocationUtils.getInstance().startLocalService();ButterKnife.bind(this);}

2、在activity中停止定位。

 @Overrideprotected void onDestroy() {super.onDestroy();LocationUtils.getInstance().stopLocalService();}

四、如有疑问请留言

Android开发封装高德实时定位工具类相关推荐

  1. android 定位工具类,高德地图定位工具类

    引言 定位功能初始化设置时耗时较多,如果放在Activity中操作,难免会有Activity切换较慢的问题.通过该工具类,可以实现一次初始化,多处随时调用.具有占用资源少,使用方便,便于复用,速度快, ...

  2. Android 开发人员不得不收集的工具类集合

    RxTools 项目地址:vondear/RxTools  简介:Android 开发人员不得不收集的工具类集合 | 支付宝支付 | 微信支付(统一下单) | 微信分享 | Zip4j 压缩(支持分卷 ...

  3. Android开发人员不得不收集的工具类集合

    一.Android开发人员不得不收集的工具类集合  ----收藏 https://github.com/RobertCow/RxTools 二.android 开发之listview工具集合框架 ht ...

  4. android位置服务与GPS实时定位工具类

    一.概述 据专家说:人类活动80%的信息与空间位置信息有关,这还真不是专家吹牛.举个例子:你跟女神约饭,你得知道女神在哪里吧?你们选择约在哪里的餐厅最合适?你们过去分别有多远?你们怎么过去?--总结起 ...

  5. android gps定位工具类,Android原生GPS和网络定位工具类

    在应用开发中我们常常需要网络获取位置的方法,这里做一个工具类的封装,使用的是Android原生定位,包含两种方式,一种是原生GPS一种是网络定位的封装实现: 工具类代码如下所示: package co ...

  6. AndroidUtils:Android开发不得不收藏的Utils工具类

    AndroidUtils Android开发不得不收藏的Utils 具体Demo使用参考开源github:AndroidUtilCode.本文只是稍微记录下方便查阅. Activity相关→Activ ...

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

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

  8. Android开发之访问WebService的工具类

    Android中使用WebService通讯,下面对访问WebService的工具类进行记录 package com.wjy.project.railway.tools;import android. ...

  9. java工具类去掉字符串String中的.点。android开发java程序员常用工具类

    下面是工具类详细代码: package com.qq986945193.david;/*** qq986945193 Project* ================================ ...

最新文章

  1. mysql zip 安装 启动_window的zip版mysql安装启动
  2. CentOS四种方法自建yum仓库
  3. Qt工作笔记-QML与C++交互
  4. 为XHR对象所有方法和属性提供钩子 全局拦截AJAX
  5. 对于employees表中,给出奇数行的first_name
  6. Objective-C语法之集合对象的那些事儿(九)
  7. UML的简单介绍和画法
  8. 用Global Mapper软件批处理将dwg转GeoPdf
  9. exp oracle 904,9i exp时出现ORA-904、ORA-1003的解决过程
  10. MyBatis 学习笔记(全)
  11. 色拉英语第2集第4幕: Cheers! ….hiccup
  12. 进不去jetbrain官网怎么办
  13. 2017百度AI开发者大会召开,智能云计算分论坛聚焦ABC
  14. java解析json天气api,使用Postman获取天气接口API(Json格式)
  15. 谨慎处理单片机中断,中断等价于比主程序优先级更高的线程
  16. oracle用升序索引去降序查询,Oracle工作札记
  17. 2018年第16周-ZooKeeper基本概念(配搭建过程和Master-Workers例子)
  18. Atracsys FusionTrack 500 光学测量系统
  19. 个体户如何注册和认证自己的微信小程序
  20. 地铁杂记 - 17寸苹果

热门文章

  1. 学习Go之前你应该知道的10件事 | Gopher Daily (2021.04.21) ʕ◔ϖ◔ʔ
  2. XMind 8 Pro 3.7.8 最受欢迎思维导图
  3. Java 支付宝当面付生成二维码支付实现
  4. linux下qt判断网线是否插入
  5. MyBatis模糊查询like语句
  6. AI基础-知识表示与分类
  7. (翻译)‘Sign Up’ 和‘Sign In’按钮让用户混淆的原因
  8. 怎样解决数据采集器无法保存资料的问题
  9. 老年人全身皮肤瘙痒案
  10. SQL SERVER FOR XML PATH 用法