上一篇文章已经讲解了如何集成高德地图SDK:跳转链接

如何你想获取附近位置信息 关键字检索poi:跳转这儿

下面我们介绍下定位功能:

配置AndroidManifest文件

上一篇文章已经讲解清单文件配置:  对应的权限,服务和key值

注意:定位需要服务

   <!-- 定位需要的服务 --><service android:name="com.amap.api.location.APSService"/>

初始化定位

先看下我们可以拿到的定位信息:

开启权限 :

  //设置定位权限if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_PERMISSION_LOCATION);} else {// 初始化定位并设置定位回调监听getCurrentLocationLatLng();}

初始化定位:

   //初始化定位mLocationClient = new AMapLocationClient(getApplicationContext());//设置定位回调监听mLocationClient.setLocationListener(mLocationListener);//初始化AMapLocationClientOption对象mLocationOption = new AMapLocationClientOption();// 同时使用网络定位和GPS定位,优先返回最高精度的定位结果,以及对应的地址描述信息mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);// 设置为单次定位  : 默认为falsemLocationOption.setOnceLocation(true);//设置定位请求超时时间 : 单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。mLocationOption.setHttpTimeOut(20000);//启动地位://给定位客户端对象设置定位参数mLocationClient.setLocationOption(mLocationOption);//启动定位mLocationClient.startLocation();

定位回调监听:

AMapLocationListener接口只有onLocationChanged方法可以实现,用于接收异步返回的定位结果,回调参数是AMapLocation。

首先,可以判断AMapLocation对象不为空,当定位错误码类型为0时定位成功。

  public AMapLocationListener mLocationListener = new AMapLocationListener() {@Overridepublic void onLocationChanged(AMapLocation amapLocation) {if (!isGpsEnabled(getApplicationContext())) {Toast toast = Toast.makeText(getApplicationContext(), "未开启GPS", Toast.LENGTH_SHORT);toast.setGravity(Gravity.CENTER, 0, 0);toast.show();} else {if (amapLocation != null) {if (amapLocation.getErrorCode() == 0) {//定位成功回调信息,设置相关消息//获取定位信息} else {//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。Log.e("AmapError", "location Error, ErrCode:"+ amapLocation.getErrorCode() + ", errInfo:"+ amapLocation.getErrorInfo());}}}}};

当定位成功时,可在如上判断中解析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();//获取当前室内定位的建筑物Id
amapLocation.getFloor();//获取当前室内定位的楼层
amapLocation.getGpsAccuracyStatus();//获取GPS的当前状态
//获取定位时间
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(amapLocation.getTime());
df.format(date);

最后一定记得停止定位:

停止定位

mLocationClient.stopLocation();//停止定位后,本地定位服务并不会被销毁

销毁定位客户端

销毁定位客户端之后,若要重新开启定位请重新New一个AMapLocationClient对象。

mLocationClient.onDestroy();//销毁定位客户端,同时销毁本地定位服务。

下面附上完整代码如下:


import android.Manifest;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Gravity;
import android.widget.TextView;
import android.widget.Toast;import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.services.core.LatLonPoint;import java.text.SimpleDateFormat;
import java.util.Date;public class ActionActivity extends AppCompatActivity {//权限设置private static final int REQUEST_PERMISSION_LOCATION = 0;//声明AMapLocationClient类对象AMapLocationClient mLocationClient = null;//声明AMapLocationClientOption对象public AMapLocationClientOption mLocationOption = null;private TextView tv_action;@TargetApi(Build.VERSION_CODES.M)@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_location);tv_action = (TextView) findViewById(R.id.tv_action);//设置定位权限if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_PERMISSION_LOCATION);} else {// 初始化定位并设置定位回调监听getCurrentLocationLatLng();}}/*** 初始化定位并设置定位回调监听*/private void getCurrentLocationLatLng() {//初始化定位mLocationClient = new AMapLocationClient(getApplicationContext());//设置定位回调监听mLocationClient.setLocationListener(mLocationListener);//初始化AMapLocationClientOption对象mLocationOption = new AMapLocationClientOption();/* //设置定位场景,目前支持三种场景(签到、出行、运动,默认无场景) 设置了场景就不用配置定位模式等option.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.SignIn);if(null != locationClient){locationClient.setLocationOption(option);//设置场景模式后最好调用一次stop,再调用start以保证场景模式生效locationClient.stopLocation();locationClient.startLocation();}*///选择定位模式:高德定位服务包含GPS和网络定位(Wi-Fi和基站定位)两种能力。// 定位SDK将GPS、网络定位能力进行了封装,以三种定位模式对外开放,SDK默认选择使用高精度定位模式。/* //只会使用网络定位mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving);//只使用GPS进行定位mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Device_Sensors);*/// 同时使用网络定位和GPS定位,优先返回最高精度的定位结果,以及对应的地址描述信息mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);// 设置为单次定位  : 默认为falsemLocationOption.setOnceLocation(true);//设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。;//mLocationOption.setInterval(3500);//设置是否返回地址信息(默认返回地址信息)/*mLocationOption.setNeedAddress(true);*///设置定位请求超时时间 : 单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。mLocationOption.setHttpTimeOut(20000);//设置是否开启定位缓存机制: 关闭缓存机制 默认开启 ,// 在高精度模式和低功耗模式下进行的网络定位结果均会生成本地缓存,不区分单次定位还是连续定位。GPS定位结果不会被缓存。mLocationOption.setLocationCacheEnable(false);//启动地位://给定位客户端对象设置定位参数mLocationClient.setLocationOption(mLocationOption);//启动定位mLocationClient.startLocation();}/*** 定位回调监听器*/public AMapLocationListener mLocationListener = new AMapLocationListener() {@Overridepublic void onLocationChanged(AMapLocation amapLocation) {if (!isGpsEnabled(getApplicationContext())) {Toast toast = Toast.makeText(getApplicationContext(), "未开启GPS", Toast.LENGTH_SHORT);toast.setGravity(Gravity.CENTER, 0, 0);toast.show();} else {if (amapLocation != null) {if (amapLocation.getErrorCode() == 0) {//定位成功回调信息,设置相关消息amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表double currentLat = amapLocation.getLatitude();//获取纬度double currentLon = amapLocation.getLongitude();//获取经度LatLonPoint latLonPoint = new LatLonPoint(currentLat, currentLon);  // latlng形式的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();//地区编码amapLocation.getAoiName();//获取当前定位点的AOI信息amapLocation.getBuildingId();//获取当前室内定位的建筑物IdamapLocation.getFloor();//获取当前室内定位的楼层amapLocation.getGpsAccuracyStatus();//获取GPS的当前状态tv_action.setText("定位时间:" + df.format(date) + "\n"+ "地址:" + amapLocation.getAddress() + "\n"+ "国家信息:" + amapLocation.getCountry() + "\n"+ "省信息:" + amapLocation.getProvince() + "\n"+ "城市信息:" + amapLocation.getCity() + "\n"+ "城区信息:" + amapLocation.getDistrict() + "\n"+ "街道信息:" + amapLocation.getStreet() + "\n"+ "街道门牌号信息:" + amapLocation.getStreetNum() + "\n"+ "城市编码:" + amapLocation.getCityCode() + "\n"+ "地区编码:" + amapLocation.getAdCode() + "\n"+ "获取当前定位点的AOI信息:" + amapLocation.getAoiName());} else {//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。Log.e("AmapError", "location Error, ErrCode:"+ amapLocation.getErrorCode() + ", errInfo:"+ amapLocation.getErrorInfo());}}}}};@Overrideprotected void onDestroy() {super.onDestroy();if (mLocationClient != null) {//销毁定位客户端,同时销毁本地定位服务。mLocationClient.onDestroy();}}@Overrideprotected void onPause() {super.onPause();if (mLocationClient != null) {//停止定位后,本地定位服务并不会被销毁mLocationClient.stopLocation();}}//判断GPS是否开启private boolean isGpsEnabled(Context context) {LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);// 判断GPS模块是否开启return locationManager != null && locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);}
}

详细定位sdk介绍请看 高德开发指南:https://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation/

demo下载链接:https://download.csdn.net/download/shanshan_1117/10679670

demo效果图:

高德地图 ——获取定位信息相关推荐

  1. 微信小程序整合高德地图获取定位经纬度信息

    1.登录高德地图https://lbs.amap.com/ a.创建新应用 这个key后边整合的时候会用到,精彩继续 b.下载SDK  https://lbs.amap.com/api/wx/down ...

  2. vue使用高德地图获取经纬度信息

    1.安装Loader npm i @amap/amap-jsapi-loader --save 2.在地图组件 MapContainer.vue 中引入 amap-jsapi-loader <s ...

  3. Android 百度地图获取定位信息并实时传给后台

    最近公司提了一个小case,因为公司物流师傅配送完货物后,通常回仓库都是空车,而这是严重的资源浪费,所以领导就给了一个小case,实时定位司机路线,先建立司机行车档案,在考虑其他业务,反正也是比较空, ...

  4. js高德地图获取道路信息

    我通过高德api搜索道路信息发现没有权限,各种网上教程也都是几年前的了,也无法获取道路信息 然后我通过抓包发现了最新的获取道路信息的api https://www.amap.com/service/p ...

  5. 使用高德地图获取省市区信息

    最近添加需求需要获取国内省市区三级信息,使用高德开放平台,可以顺利的获取到当前国内省市区信息,如图所示: 操作流程: 先创建web应用,记录应用Key,绑定Web服务 https://console. ...

  6. android百度地图获取定位信息吗,android使用百度地圖定位(獲取當前經緯度和地址信息)...

    首先,當然是把需要用到的包導入到工程項目中.(沒有包的自己去百度API官網下載) 把 baidumapapi_v3_0_0.jar 和 locSDK_4.2.jar復制粘貼到項目的libs目錄下, 然 ...

  7. android使用高德地图SDK获取定位信息

    注册账号.创建应用.获取API KEY等这些就不说了,按照官网来就行,我们来讲讲项目的配置及示例代码. 高德地图获取定位信息配置要比百度地图简单多了,这是我比较喜欢的一点,而且之前用百度地图嵌入一个应 ...

  8. android 百度地图拖动定位,百度地图获取定位,实现拖动marker定位,返回具体的位置名...

    body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑"; ...

  9. uniapp+高德地图api 获取定位信息及详细地址

    引入高德地图js api 高德地图api官方文档 根据官方文档建议,我使用的是JSAPI Loader 并且是通过npm安装的 npm i @amap/amap-jsapi-loader --save ...

最新文章

  1. 连接MYSQL的时候报错(找不到请求的.net framework data provider。可能没有安装
  2. python技术介绍_Python编程语言基础技术框架()之函数介绍
  3. Mysql学习笔记(三)运算符和控制流函数
  4. 苹果发布第四财季财报 iPhone 13上市初期表现如何将见分晓
  5. 警惕:近日时尚房产政府类网站被大量挂马
  6. quartz入门案例
  7. 【转】知识图谱构建全过程
  8. 我的Qt作品(12)使用Qt+OpenCV实现一个带旋转角度的Shape形状匹配演示软件
  9. 内核编译报错: warning: the frame size of 1072 bytes is larger than 1024 bytes
  10. 全国计算机等级考试三级数据库技术(十)
  11. 阿里架构师的架构设计——详解高可用架构设计
  12. P4556 雨天的尾巴 线段树合并
  13. b站视频素材哪里找?怎么找b站素材?
  14. VMWare 虚拟机, CentOS7环境下 部署Cobbler (含web)
  15. 代价函数/梯度下降法
  16. 计算机保研夏令营会有院校歧视吗?怎么应对院校歧视?
  17. android popmenu,android 自定义PopupMenu详解
  18. android-pdf阅读器(Android开源项目)
  19. 无参考图像的清晰度评价方法
  20. 拨号上网、热点分享问题

热门文章

  1. 谷歌应用商店APP的分析
  2. jsessionid用途
  3. 半导体器件基础09:MOS管特性和应用(2)
  4. 执行宏时出现“在中断模式不能执行程序代码”
  5. Tlsr8258开发-小问题汇总
  6. idea 打包报错 Could not find artifact com.ruoyi:ruoyi-framework:pom:4.6.1 in public (http://maven.aliyun
  7. Ansys学习-Ansys workbench-暂态传热问题仿真尝试-水泥盒子
  8. MATLAB实现三种基本排序(选择+冒泡+插入)
  9. (附源码)springboot高校学生健康打卡系统的设计与实现 毕业设计021009
  10. python图像特征提取与匹配_图像特征特点及其常用的特征提取与匹配方法