Android开发封装高德实时定位工具类
前言
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开发封装高德实时定位工具类相关推荐
- android 定位工具类,高德地图定位工具类
引言 定位功能初始化设置时耗时较多,如果放在Activity中操作,难免会有Activity切换较慢的问题.通过该工具类,可以实现一次初始化,多处随时调用.具有占用资源少,使用方便,便于复用,速度快, ...
- Android 开发人员不得不收集的工具类集合
RxTools 项目地址:vondear/RxTools 简介:Android 开发人员不得不收集的工具类集合 | 支付宝支付 | 微信支付(统一下单) | 微信分享 | Zip4j 压缩(支持分卷 ...
- Android开发人员不得不收集的工具类集合
一.Android开发人员不得不收集的工具类集合 ----收藏 https://github.com/RobertCow/RxTools 二.android 开发之listview工具集合框架 ht ...
- android位置服务与GPS实时定位工具类
一.概述 据专家说:人类活动80%的信息与空间位置信息有关,这还真不是专家吹牛.举个例子:你跟女神约饭,你得知道女神在哪里吧?你们选择约在哪里的餐厅最合适?你们过去分别有多远?你们怎么过去?--总结起 ...
- android gps定位工具类,Android原生GPS和网络定位工具类
在应用开发中我们常常需要网络获取位置的方法,这里做一个工具类的封装,使用的是Android原生定位,包含两种方式,一种是原生GPS一种是网络定位的封装实现: 工具类代码如下所示: package co ...
- AndroidUtils:Android开发不得不收藏的Utils工具类
AndroidUtils Android开发不得不收藏的Utils 具体Demo使用参考开源github:AndroidUtilCode.本文只是稍微记录下方便查阅. Activity相关→Activ ...
- Android开发实现高德地图定位详解
一. 要实现高德地图定位呢,首先需要做好以下几步准备: 1. 在高德开放平台注册帐号 注册地址:http://lbs.amap.com 2. 在开发中下载Android平台下的地图SDK和定位S ...
- Android开发之访问WebService的工具类
Android中使用WebService通讯,下面对访问WebService的工具类进行记录 package com.wjy.project.railway.tools;import android. ...
- java工具类去掉字符串String中的.点。android开发java程序员常用工具类
下面是工具类详细代码: package com.qq986945193.david;/*** qq986945193 Project* ================================ ...
最新文章
- mysql zip 安装 启动_window的zip版mysql安装启动
- CentOS四种方法自建yum仓库
- Qt工作笔记-QML与C++交互
- 为XHR对象所有方法和属性提供钩子 全局拦截AJAX
- 对于employees表中,给出奇数行的first_name
- Objective-C语法之集合对象的那些事儿(九)
- UML的简单介绍和画法
- 用Global Mapper软件批处理将dwg转GeoPdf
- exp oracle 904,9i exp时出现ORA-904、ORA-1003的解决过程
- MyBatis 学习笔记(全)
- 色拉英语第2集第4幕: Cheers! ….hiccup
- 进不去jetbrain官网怎么办
- 2017百度AI开发者大会召开,智能云计算分论坛聚焦ABC
- java解析json天气api,使用Postman获取天气接口API(Json格式)
- 谨慎处理单片机中断,中断等价于比主程序优先级更高的线程
- oracle用升序索引去降序查询,Oracle工作札记
- 2018年第16周-ZooKeeper基本概念(配搭建过程和Master-Workers例子)
- Atracsys FusionTrack 500 光学测量系统
- 个体户如何注册和认证自己的微信小程序
- 地铁杂记 - 17寸苹果
热门文章
- 学习Go之前你应该知道的10件事 | Gopher Daily (2021.04.21) ʕ◔ϖ◔ʔ
- XMind 8 Pro 3.7.8 最受欢迎思维导图
- Java 支付宝当面付生成二维码支付实现
- linux下qt判断网线是否插入
- MyBatis模糊查询like语句
- AI基础-知识表示与分类
- (翻译)‘Sign Up’ 和‘Sign In’按钮让用户混淆的原因
- 怎样解决数据采集器无法保存资料的问题
- 老年人全身皮肤瘙痒案
- SQL SERVER FOR XML PATH 用法