安卓地图的开发对于一个没有地图开发经验的人来说还是有点摸不着头脑的,我刚开始的时候就走了很多弯路,现在将自己实现的方法分享出来,供大家参考:

首先要去到高德地图的开方平台申请key值:点击打开链接

然后下载相关的jar包和.so文件:

准备好这些,接下来一步一步的集成就OK了;

1、拷贝 jar 文件至 libs 文件夹下

将下载的定位 SDK jar 文件复制到工程(此处截图以官方示例Demo为例子)的 libs 目录下,如果有老版本定位 jar 文件存在,请删除。定位 SDK 无需 so 库文件支持。如图所示:

2、配置 build.gradle 文件

在 build.gradle 文件的 dependencies 中配置 compile fileTree(include: ['*.jar'], dir: 'libs')。

3、将 .so文件添加到项目中来;

将下载好的所有的.so文件复制到下图目录中

这些配置好之后按照下面的步骤来:


第 1 步,配置AndroidManifest.xml

首先,声明Service组件

请在application标签中声明service组件,每个app拥有自己单独的定位service。

<service android:name="com.amap.api.location.APSService"></service>

然后,声明权限

Android 6.0及以上系统可以参考Android 6.0权限说明章节

<!--用于进行网络定位-->
<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>

最后,设置高德Key

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


接下来直接贴出完整的代码:

MainActivity.java

/*** Copyright: Copyright (c) 2017-2025* Company: 河南******科技有限责任公司** @author: 赵小贱(153****8258@163.com)* @date: 2018/2/5* describe:*/
public class MainActivity extends AppCompatActivity {private static final float ZOOM_VALUE = 16;private static final String TAG = "MainActivity";private MapView mMapView;private AMap mMap;private AMapLocationClient mLocationClient;private AMapLocationClientOption mLocationOption;private LocationSource.OnLocationChangedListener mListener;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mMapView = (MapView) findViewById(R.id.map_view);mMapView.onCreate(savedInstanceState);if (mMap == null) {mMap = mMapView.getMap();}mMap.getUiSettings().setZoomControlsEnabled(false);//设置地图的缩放级别mMap.moveCamera(CameraUpdateFactory.zoomTo(ZOOM_VALUE));//调用此方法定位setUpMap();}/*** 设置一些amap的属性*/private void setUpMap() {// 自定义系统定位小蓝点MyLocationStyle myLocationStyle = new MyLocationStyle();//  myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.location_marker));// 设置小蓝点的图标myLocationStyle.strokeColor(Color.BLACK);// 设置圆形的边框颜色myLocationStyle.radiusFillColor(Color.argb(100, 0, 191, 255));// 设置圆形的填充颜色// myLocationStyle.anchor(int,int)//设置小蓝点的锚点myLocationStyle.strokeWidth(1.0f);// 设置圆形的边框粗细mMap.setMyLocationStyle(myLocationStyle);mMap.setLocationSource(mLocationSource);// 设置定位监听mMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示mMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false}public LocationSource mLocationSource = new LocationSource() {@Overridepublic void activate(OnLocationChangedListener onLocationChangedListener) {mListener = onLocationChangedListener;//初始化定位initAmapLocation();}@Overridepublic void deactivate() {mListener = null;if (mLocationClient != null) {mLocationClient.stopLocation();mLocationClient.onDestroy();}mLocationClient = null;}};/*** 初始化定位*/private void initAmapLocation() {//初始化定位mLocationClient = new AMapLocationClient(this);//设置定位回调监听mLocationClient.setLocationListener(mAMapLocationListener);//初始化AMapLocationClientOption对象mLocationOption = new AMapLocationClientOption();// 设置定位场景,目前支持三种场景(签到、出行、运动,默认无场景)mLocationOption.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.Transport);//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。mLocationOption.setInterval(5000);//设置是否返回地址信息(默认返回地址信息)mLocationOption.setNeedAddress(true);//单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。mLocationOption.setHttpTimeOut(20000);if (null != mLocationClient) {mLocationClient.setLocationOption(mLocationOption);//设置场景模式后最好调用一次stop,再调用start以保证场景模式生效//  mLocationClient.stopLocation();mLocationClient.startLocation();}}/*** 定位*/public AMapLocationListener mAMapLocationListener = new AMapLocationListener() {@Overridepublic void onLocationChanged(AMapLocation amapLocation) {if (amapLocation != null) {if (amapLocation.getErrorCode() == 0) {//可在其中解析amapLocation获取相应内容。mListener.onLocationChanged(amapLocation);// 显示系统小蓝点,不写这一句无法显示到当前位置amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表amapLocation.getLatitude();//获取纬度amapLocation.getLongitude();//获取经度amapLocation.getAccuracy();//获取精度信息amapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。amapLocation.getCountry();//国家信息amapLocation.getProvince();//省信息amapLocation.getCity();//城市信息amapLocation.getDistrict();//城区信息amapLocation.getStreet();//街道信息amapLocation.getStreetNum();//街道门牌号信息amapLocation.getCityCode();//城市编码amapLocation.getAdCode();//地区编码amapLocation.getAoiName();//获取当前定位点的AOI信息amapLocation.getBuildingId();//获取当前室内定位的建筑物IdamapLocation.getFloor();//获取当前室内定位的楼层amapLocation.getGpsAccuracyStatus();//获取GPS的当前状态amapLocation.getLocationDetail();//定位信息描述amapLocation.getBearing();//获取方向角信息amapLocation.getSpeed();//获取速度信息  单位:米/秒amapLocation.getPoiName();//获取当前位置的POI名称//获取定位时间SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date(amapLocation.getTime());sdf.format(date);Log.e(TAG, "获取当前定位结果来源:::" + amapLocation.getLocationType());Log.e(TAG, "获取纬度:::" + amapLocation.getLatitude());Log.e(TAG, "获取经度:::" + amapLocation.getLongitude());Log.e(TAG, "获取精度信息:::" + amapLocation.getAccuracy());Log.e(TAG, "获取地址:::" + amapLocation.getAddress());Log.e(TAG, "获取国家信息:::" + amapLocation.getCountry());Log.e(TAG, "获取省信息:::" + amapLocation.getProvince());Log.e(TAG, "获取城市信息:::" + amapLocation.getCity());Log.e(TAG, "获取城区信息:::" + amapLocation.getDistrict());Log.e(TAG, "获取街道信息:::" + amapLocation.getStreet());Log.e(TAG, "获取街道门牌号信息:::" + amapLocation.getStreetNum());Log.e(TAG, "获取城市编码:::" + amapLocation.getCityCode());Log.e(TAG, "获取地区编码:::" + amapLocation.getAdCode());Log.e(TAG, "获取当前定位点的AOI信息:::" + amapLocation.getAoiName());Log.e(TAG, "获取当前室内定位的建筑物Id:::" + amapLocation.getBuildingId());Log.e(TAG, "获取当前室内定位的楼层:::" + amapLocation.getFloor());Log.e(TAG, "获取GPS的当前状态:::" + amapLocation.getGpsAccuracyStatus());Log.e(TAG, "获取定位信息描述:::" + amapLocation.getLocationDetail());Log.e(TAG, "获取方向角信息:::" + amapLocation.getBearing());Log.e(TAG, "获取速度信息:::" + amapLocation.getSpeed() + "m/s");Log.e(TAG, "获取海拔高度信息:::" + amapLocation.getAltitude());Log.e(TAG, "获取当前位置的POI名称:::" + amapLocation.getPoiName());} else {//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。Log.e("AmapError", "location Error, ErrCode:" + amapLocation.getErrorCode() + ", errInfo:" + amapLocation.getErrorInfo());}}}};
}

到这里就实现了实时定位了,有什么不懂得可以私信我~~~~~

Demo源码下载地址:http://download.csdn.net/download/zhaoxiaojian1213/10246124




安卓高德地图实时定位方法的封装相关推荐

  1. 高德地图实时定位显示图标和名字

    前言:最近公司项目有个需要展示人员的实时定位和轨迹回放的需求,查阅了一些资料,最后决定用高德地图去实现. 注:人员的实时位置用的uniapp做的打包的app实时上传登录者的位置信息上传到后台,pc端获 ...

  2. 安卓高德地图-(定位+离线UI组件自定义1)

    效果图: 其中第二张图是官网默认的,后面有讲解如何自己定义界面. STEP1: 先去高德开放平台注册账号,网址:http://lbs.amap.com/ 之后再去控制台-应用管理找到自己的key,如下 ...

  3. html引入高德地图-实时定位

    https://lbs.amap.com/  高德地图开放平台 1.注册账号 2.控制台-应用管理-我的应用 创建 新应用 添加应用详情: 选择js-web <!-- https://lbs.a ...

  4. Android基于高德地图实时定位服务

    Service功能有:实时定位(后台进行) Service不会,去百度谷歌 功能有 实时定位(30秒间隔) 判断是否在规定的时间段内 判断距离是否大于规定的距离 判断服务是否在开启的状态 服务代码:L ...

  5. android 高德地图 lbstraceclient,安卓高德地图定位篇-(1)

    安卓高德地图定位.先看效果图: STEP1: 先去高德开放平台注册账号,这个不用多说吧 网址:https://lbs.amap.com/ 之后再去控制台-应用管理找到自己的key,如下图所示 STEP ...

  6. 手机室内地磁定位软件_一种基于地磁的智能手机实时定位方法与流程

    本发明涉及室内地磁定位导航方法,具体涉及一种基于地磁的智能手机实时定位方法,属于移动计算和室内定位技术领域. 背景技术: 随着室内定位导航的日益需求,利用地磁信息作为位置指纹的室内定位导航技术显示出其 ...

  7. Android 集成高德地图——当前定位,添加图标,画路线,设置显示中心位置,比例,地图刷新位置监听,判断GPS开启,去打开GPS

    /*** 判断定位服务是否开启** @param* @return true 表示开启*/ public static boolean isLocationEnabled(Context contex ...

  8. 高德地图H5 定位失败报错 geolocation time out. Get ipLocation failed解决方案

    高德地图H5 定位失败报错 geolocation time out. Get ipLocation failed的解决方法. 前言:此坑踩得我挺难受的,搞了三天 需求:进入页面,获取用户具体经纬度并 ...

  9. Android Studio之高德地图实现定位和3D地图显示

    在应用开发中,地图开发是经常需要使用的"组件",国内比较出名的是就是百度地图和高德地图. 此博客讲的是高德地图实现定位和3D地图显示,并标注相应位置,话不多说,先看看效果,在上代码 ...

最新文章

  1. ArcGIS中标注之一上下标、分数等特殊形式标注(转)
  2. 汽车行业中的AUTOSAR与OSEK到底是什么,有什么区别
  3. 安卓学习笔记16:常用控件 - 标签
  4. BTC 5分钟内涨幅1.08%,现价23903.52usdt
  5. .net ef 字段不区分大小写_第六节:框架搭建之EF的Fluent Api模式的使用流程
  6. RabbitMQ(3) Spring boot集成RabbitMQ
  7. metasfresh 大型java开源制造业erp介绍
  8. 《Redis开发与运维》读书笔记一
  9. 区块链交易正规平台有哪些?哪个区块链交易平台正规?
  10. win系统装机及磁盘分区、清理
  11. JavaScript中变量判断是否是数字,判断是否是整数,判断是否是正整数/负整数,判断奇数/偶数的方法
  12. 灌区续建配套与信息化改造工程--设备选型
  13. scrapy爬取知乎问题实战
  14. Google VR开发-Cardboard VR SDK头部追踪实现(罗德里格旋转公式)
  15. K8S YAML 详解
  16. Column ‘‘ in field list is a ambiguous
  17. Python编程:从入门到实践关于pi,百万位圆周率,pi_million_digits.txt,分享给大家
  18. 关于ext4文件系统概述
  19. [windows]修改本机host配置
  20. 利用高德地图API批量获取地点经纬度和行车线路与OD距离(excel和python)

热门文章

  1. 中兴手机android版本升级包下载,刷机
  2. KWP 2000协议
  3. npm ERR! cb() never called! 解决办法
  4. Linux 分区方案
  5. [论文笔记] XRP: In-Kernel Storage Functions with eBPF
  6. js实现在线AES加密解密(支持ECB,CBC,并输出Base64或Hex)
  7. 华为机试—操作系统任务调度
  8. 微信小程序-000-签到功能-013-二维码凭证-二维码
  9. SpringBoot+Vue项目中实现登录验证码校验
  10. 每个人背后都会有人在默默注视着你,所以很幸福