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


进入相关下载下载自己想要的功能或文件,图只是截取了地图SDK的页面,定位SDK也是一样,按自己想要的文件下载。下载完成后解压得到:
- 3D地图包解压后得到:3D地图显示包“AMap_3DMap_VX.X.X_时间.jar”和库文件夹(包含armeabi、arm64-v8a等库文件)。
- 2D地图包解压后得到:2D地图显示包“AMap_2DMap_VX.X.X_时间.jar ”
- 定位SDK下载并解压得到定位包“AMap_Location_V2.x.x.jar“
3. 添加jar包,将jar包放入工程的libs目录下。

对于每个jar文件,右键-选择Add As Library,导入到工程中。或者使用菜单栏 选择 File ->Project Structure->Modules-> Dependencies。点击绿色的加号选择File dependency. 然后选择要添加的jar包即可,此时build.gradle中会自动生成如下信息。

4. 申请API KEY
进入控制台

创建自己的应用(创建过程内需要的SHA1已经的博客讲过)

开发环境已经配置好了,接下来就是敲代码了。

二、 首先我们要做的就是将地图显示出来,通过以下几步操作,即可在应用中使用高德地图SDK:

第一步:添加用户key 在工程的“ AndroidManifest.xml ”文件如下代码中添加您的用户 Key。

 <applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><meta-dataandroid:name="com.amap.api.v2.apikey"android:value="c9df032baec3ec50b1e089768ea4672b" />

第二步:添加所需权限 在工程的“ AndroidManifest.xml ”文件中进行添加。

//地图包、搜索包需要的基础权限<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />//定位包、导航包需要的额外权限(注:基础权限也需要)<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /><uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

第三步:在布局xml文件中添加地图控件。

<com.amap.api.maps2d.MapViewandroid:id="@+id/map_view"android:layout_width="match_parent"android:layout_height="match_parent" />

第四步,创建地图Activity,管理地图生命周期。

public class MainActivity extends Activity {private MapView mMapView = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);//获取地图控件引用mMapView = (MapView) findViewById(R.id.map);//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理mMapView.onCreate(savedInstanceState);}@Overrideprotected void onDestroy() {super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理mMapView.onDestroy();}@Overrideprotected void onResume() {super.onResume();//在activity执行onResume时执行mMapView.onResume (),实现地图生命周期管理mMapView.onResume();}@Overrideprotected void onPause() {super.onPause();//在activity执行onPause时执行mMapView.onPause (),实现地图生命周期管理mMapView.onPause();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),实现地图生命周期管理mMapView.onSaveInstanceState(outState);} }

注意:一定要有mMapView.onCreate(savedInstanceState);
运行一下,效果如下:

三、接下来就是实现定位了,定位也需要通过以下几步操作完成:

第一步:配置AndroidManifest.xml

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

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

2.接下来声明使用权限

<!--用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!--用于访问GPS定位--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><!--获取运营商信息,用于支持提供运营商信息相关的接口--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!--用于访问wifi网络信息,wifi信息会用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><!--用于访问网络,网络定位需要上网--><uses-permission android:name="android.permission.INTERNET" /><!--用于读取手机当前的状态--><uses-permission android:name="android.permission.READ_PHONE_STATE" /><!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

第二步:启动定位功能:

1. 在主线程中获得地图对象AMap,并设置定位监听且实现LocationSource接口:
public class MainActivity extends Activity implements LocationSource{
if (aMap == null) {aMap = mapView.getMap();//设置显示定位按钮 并且可以点击UiSettings settings = aMap.getUiSettings();aMap.setLocationSource(this);//设置了定位的监听,这里要实现LocationSource接口// 是否显示定位按钮settings.setMyLocationButtonEnabled(true);aMap.setMyLocationEnabled(true);//显示定位层并且可以触发定位,默认是flase}
2. 配置定位参数,启动定位
//初始化定位mLocationClient = new AMapLocationClient(getApplicationContext());//设置定位回调监听,这里要实现AMapLocationListener接口,AMapLocationListener接口只有onLocationChanged方法可以实现,用于接收异步返回的定位结果,参数是AMapLocation类型。mLocationClient.setLocationListener(this);//初始化定位参数mLocationOption = new AMapLocationClientOption();//设置定位模式为Hight_Accuracy高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置是否返回地址信息(默认返回地址信息)mLocationOption.setNeedAddress(true);//设置是否只定位一次,默认为falsemLocationOption.setOnceLocation(false);//设置是否强制刷新WIFI,默认为强制刷新mLocationOption.setWifiActiveScan(true);//设置是否允许模拟位置,默认为false,不允许模拟位置mLocationOption.setMockEnable(false);//设置定位间隔,单位毫秒,默认为2000msmLocationOption.setInterval(2000);//给定位客户端对象设置定位参数mLocationClient.setLocationOption(mLocationOption);//启动定位mLocationClient.startLocation()
  • 高精度定位模式:

    在这种定位模式下,将同时使用高德网络定位和GPS定位,优先返回精度高的定位
    
  • 低功耗定位模式:

    在这种模式下,将只使用高德网络定位
    
  • 仅设备定位模式:

    在这种模式下,将只使用GPS定位。3. 实现AMapLocationListener接口,获取定位结果:
    
public class MainActivity extends Activity implements LocationSource, AMapLocationListener {
  • 1
@Override
public void onLocationChanged(AMapLocation aMapLocation) {if (aMapLocation != null) {if (aMapLocation.getErrorCode() == 0) {//定位成功回调信息,设置相关消息aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见官方定位类型表aMapLocation.getLatitude();//获取纬度aMapLocation.getLongitude();//获取经度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();//地区编码// 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置if (isFirstLoc) {//设置缩放级别aMap.moveCamera(CameraUpdateFactory.zoomTo(17));//将地图移动到定位点aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude())));//点击定位按钮 能够将地图的中心移动到定位点mListener.onLocationChanged(aMapLocation);//获取定位信息StringBuffer buffer = new StringBuffer();buffer.append(aMapLocation.getCountry() + ""+ aMapLocation.getProvince() + ""+ aMapLocation.getCity() + ""+ aMapLocation.getProvince() + ""+ aMapLocation.getDistrict() + ""+ aMapLocation.getStreet() + ""+ aMapLocation.getStreetNum());Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show();isFirstLoc = false;}} else {//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。Log.e("AmapError", "location Error, ErrCode:"+ aMapLocation.getErrorCode() + ", errInfo:"+ aMapLocation.getErrorInfo());Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG).show();}}
}
4.关于停止定位
    @Overrideprotected void onDestroy() {super.onDestroy();mapView.onDestroy();//mLocationClient.stopLocation();//停止定位mLocationClient.onDestroy();//销毁定位客户端。//销毁定位客户端之后,若要重新开启定位请重新New一个AMapLocationClient对象。}//激活定位@Overridepublic void activate(OnLocationChangedListener onLocationChangedListener) {mListener = onLocationChangedListener;}@Overridepublic void deactivate() {mListener = null;}

Android开发实现高德地图定位详解相关推荐

  1. Android开发之高德地图定位成功返回的定位信息

    /*** 定位监听*/AMapLocationListener locationListener = new AMapLocationListener() {@Overridepublic void ...

  2. Android开发之百度地图定位

    Android开发之百度地图定位 一.效果图 二.下载百度地图SDK 1.打开[百度地图](https://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9% ...

  3. Android开发之百度地图定位打卡

    Android开发之百度地图定位打卡 一.效果图 二.下载百度地图SDK 三.代码实现 1.布局文件(activity_main) 2.布局文件(activity_map) 3.在res文件夹下新建m ...

  4. android什么控件能够输入多行文字,Android开发:文本控件详解——EditText(一)基本属性...

    一.简单实例: EditText输入的文字样式部分的属性,基本都是和TextView中的属性一样. 除此之外,EditText还有自己独有的属性. 二.基本属性: hint 输入框显示的提示文本 te ...

  5. android开发之高德地图不能定位,只显示格子

    android 在引用高德地图组件进行开发的时候,不能定位,只显示格子,如下图所示: 参考了网上的一下大家的解决方案,主要是 (1)检查申请的KEY是否正确.PS:申请方法请参考这篇博客,写的很全很详 ...

  6. 使用plugman开发cordova 高德地图定位插件

    在开发的过程中我们更多的是使用别人开发的cordova插件,但是在使用的过程中经常会遇到一些不合自己心意的问题,那么我们就来使用plugman开发一个属于自己的cordova插件吧. 源码地址 : h ...

  7. Android项目集成高德地图定位功能

    1.在Project的build.gradle文件中配置repositories,添加maven或jcenter仓库地址 Android Studio默认会在Project的build.gradle为 ...

  8. android开发之高德地图API篇:1、高德地图API之实时定位+轨迹可视化

    TIME:2020年7月6日 高德地图API之实时定位+轨迹可视化 前言: step1.工程的配置 step2.显示地图 step2.实现静态定位: step3.实时定位 step4.实现轨迹可视化: ...

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

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

最新文章

  1. 玩吧高速增长的数据上云实践
  2. HFileOutputFormat与TotalOrderPartitioner
  3. 在php中使用sockets:从新闻组中获取文章
  4. 【C#/.NET 日常开发技巧】JWT+ActionFilter 简便控制器代码
  5. Python应用实战-Pandas 计算连续行为天数的几种思路
  6. ip字符串转换 linux,Linux网络编程入门
  7. android中虚拟程序停止,为什么我的在虚拟机运行后出现应用程序停止运行
  8. c#把日期改成数字字符串_C#编写壹个函数将输入的中文日期转换为阿拉伯数字日期...
  9. 记录一次客户Oracle启动不了的解决过程
  10. ML笔记 - 自然语言处理常用技术
  11. 设置单行省略的时候在搜狗浏览器里面导致页面布局紊乱
  12. 简述一下mysql与sqlyog的安装
  13. 如何测试app启动时间?
  14. 想玩IEO又怕跑得慢?LBank的“锁仓释放”了解下
  15. 批量转换经纬度的网页实现方法
  16. 大数据是不是互联网思维?
  17. fairyGUI的学习记录1
  18. 2019个人成长计划
  19. pcie gen3 bios设置_u盘pe设置联想台式机lenovo BIOS从u盘启动教程
  20. java long 0_Java中的long类型和Long类型比较大小

热门文章

  1. Windows自带的录屏怎么用?Windows自带的录屏能录多久
  2. 落谷 P1464 function (空间换时间、记忆化搜索)
  3. 那年大四,第一次接触“青少年人工智能教育”
  4. 飞瓜app Sign
  5. 卡巴斯基安全软件更新失败解决办法
  6. 如何选择日本云服务器
  7. python第25天_python 第25天
  8. 服务器的系统盘设置多大合适,win10系统盘多大合适?win10系统盘设置多大空间合适...
  9. 华为linux笔记本安装win7,华为MateBook E笔记本U盘安装win7系统的操作教程
  10. 如何在浏览器中点击复制微信号并且跳转到微信