当前位置:   article > 正文

高德地图开发_高得开发

高得开发

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

  1. <application
  2. android:allowBackup="true"
  3. android:icon="@mipmap/ic_launcher"
  4. android:label="@string/app_name"
  5. android:supportsRtl="true"
  6. android:theme="@style/AppTheme">
  7. <meta-data
  8. android:name="com.amap.api.v2.apikey"
  9. android:value="c9df032baec3ec50b1e089768ea4672b" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

  1. //地图包、搜索包需要的基础权限
  2. <uses-permission android:name="android.permission.INTERNET" />
  3. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  4. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  5. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  6. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  7. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  8. //定位包、导航包需要的额外权限(注:基础权限也需要)
  9. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  10. <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
  11. <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
  12. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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

  1. <com.amap.api.maps2d.MapView
  2. android:id="@+id/map_view"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent" />
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

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

  1. public class MainActivity extends Activity {
  2. private MapView mMapView = null;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. //获取地图控件引用
  8. mMapView = (MapView) findViewById(R.id.map_view);
  9. //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理
  10. mMapView.onCreate(savedInstanceState);
  11. }
  12. @Override
  13. protected void onDestroy() {
  14. super.onDestroy();
  15. //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
  16. mMapView.onDestroy();
  17. }
  18. @Override
  19. protected void onResume() {
  20. super.onResume();
  21. //在activity执行onResume时执行mMapView.onResume (),实现地图生命周期管理
  22. mMapView.onResume();
  23. }
  24. @Override
  25. protected void onPause() {
  26. super.onPause();
  27. //在activity执行onPause时执行mMapView.onPause (),实现地图生命周期管理
  28. mMapView.onPause();
  29. }
  30. @Override
  31. protected void onSaveInstanceState(Bundle outState) {
  32. super.onSaveInstanceState(outState);
  33. //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),实现地图生命周期管理
  34. mMapView.onSaveInstanceState(outState);
  35. }
  36. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

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

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

第一步:配置AndroidManifest.xml

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

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

2.接下来声明使用权限

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

第二步:启动定位功能:

1. 在主线程中获得地图对象AMap,并设置定位监听且实现LocationSource接口:

   
   
  • 1
  • 2
  • 1
  • 2
public class MainActivity extends Activity implements LocationSource{
   
   
  • 1
  • 1
  1. if (aMap == null) {
  2. aMap = mMapView.getMap();
  3. //设置显示定位按钮 并且可以点击
  4. UiSettings settings = aMap.getUiSettings();
  5. aMap.setLocationSource(this);//设置了定位的监听,这里要实现LocationSource接口
  6. // 是否显示定位按钮
  7. settings.setMyLocationButtonEnabled(true);
  8. aMap.setMyLocationEnabled(true);//显示定位层并且可以触发定位,默认是flase
  9. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
2. 配置定位参数,启动定位

   
   
  • 1
  • 2
  • 1
  • 2
  1. //初始化定位
  2. mLocationClient = new AMapLocationClient(getApplicationContext());
  3. //设置定位回调监听,这里要实现AMapLocationListener接口,AMapLocationListener接口只有onLocationChanged方法可以实现,用于接收异步返回的定位结果,参数是AMapLocation类型。
  4. mLocationClient.setLocationListener(this);
  5. //初始化定位参数
  6. mLocationOption = new AMapLocationClientOption();
  7. //设置定位模式为Hight_Accuracy高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
  8. mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
  9. //设置是否返回地址信息(默认返回地址信息)
  10. mLocationOption.setNeedAddress(true);
  11. //设置是否只定位一次,默认为false
  12. mLocationOption.setOnceLocation(false);
  13. //设置是否强制刷新WIFI,默认为强制刷新
  14. mLocationOption.setWifiActiveScan(true);
  15. //设置是否允许模拟位置,默认为false,不允许模拟位置
  16. mLocationOption.setMockEnable(false);
  17. //设置定位间隔,单位毫秒,默认为2000ms
  18. mLocationOption.setInterval(2000);
  19. //给定位客户端对象设置定位参数
  20. mLocationClient.setLocationOption(mLocationOption);
  21. //启动定位
  22. mLocationClient.startLocation();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 高精度定位模式:

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

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

    1. 在这种模式下,将只使用GPS定位。
    2. 3. 实现AMapLocationListener接口,获取定位结果:
    • 1
    • 2
    • 3
    • 4
    • 1
    • 2
    • 3
    • 4
public class MainActivity extends Activity implements LocationSource, AMapLocationListener {
   
   
  • 1
  • 1
  1. @Override
  2. public void onLocationChanged(AMapLocation aMapLocation) {
  3. if (aMapLocation != null) {
  4. if (aMapLocation.getErrorCode() == 0) {
  5. //定位成功回调信息,设置相关消息
  6. aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见官方定位类型表
  7. aMapLocation.getLatitude();//获取纬度
  8. aMapLocation.getLongitude();//获取经度
  9. aMapLocation.getAccuracy();//获取精度信息
  10. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  11. Date date = new Date(aMapLocation.getTime());
  12. df.format(date);//定位时间
  13. aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
  14. aMapLocation.getCountry();//国家信息
  15. aMapLocation.getProvince();//省信息
  16. aMapLocation.getCity();//城市信息
  17. aMapLocation.getDistrict();//城区信息
  18. aMapLocation.getStreet();//街道信息
  19. aMapLocation.getStreetNum();//街道门牌号信息
  20. aMapLocation.getCityCode();//城市编码
  21. aMapLocation.getAdCode();//地区编码
  22. // 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置
  23. if (isFirstLoc) {
  24. //设置缩放级别
  25. aMap.moveCamera(CameraUpdateFactory.zoomTo(17));
  26. //将地图移动到定位点
  27. aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude())));
  28. //点击定位按钮 能够将地图的中心移动到定位点
  29. mListener.onLocationChanged(aMapLocation);
  30. //获取定位信息
  31. StringBuffer buffer = new StringBuffer();
  32. buffer.append(aMapLocation.getCountry() + ""
  33. + aMapLocation.getProvince() + ""
  34. + aMapLocation.getCity() + ""
  35. + aMapLocation.getProvince() + ""
  36. + aMapLocation.getDistrict() + ""
  37. + aMapLocation.getStreet() + ""
  38. + aMapLocation.getStreetNum());
  39. Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show();
  40. isFirstLoc = false;
  41. }
  42. } else {
  43. //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
  44. Log.e("AmapError", "location Error, ErrCode:"
  45. + aMapLocation.getErrorCode() + ", errInfo:"
  46. + aMapLocation.getErrorInfo());
  47. Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG).show();
  48. }
  49. }
  50. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
4.关于停止定位

   
   
  • 1
  • 2
  • 1
  • 2
  1. @Override
  2. protected void onDestroy() {
  3. super.onDestroy();
  4. mapView.onDestroy();
  5. //mLocationClient.stopLocation();//停止定位
  6. mLocationClient.onDestroy();//销毁定位客户端。
  7. //销毁定位客户端之后,若要重新开启定位请重新New一个AMapLocationClient对象。
  8. }
  9. //激活定位
  10. @Override
  11. public void activate(OnLocationChangedListener onLocationChangedListener) {
  12. mListener = onLocationChangedListener;
  13. }
  14. @Override
  15. public void deactivate() {
  16. mListener = null
  17. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

源码地址:http://download.csdn.net/detail/mr_wzc/9532367

版权声明:本文为博主原创文章,未经博主允许不得转载。
a274191047
  • a274191047
    2017-09-09 23:11 5楼
  • 写的很好,借用了,谢谢!

Wyt9431
  • Wyt9431
    2017-04-10 14:39 4楼
  • 写得很详细!感谢

qq_33923079
  • qq_33923079
    2017-03-09 11:18 3楼
  • <meta-data
    android:name="com.amap.api.v2.apikey"
    android:value="c9df032baec3ec50b1e089768ea4672b" />
    APIKey一不小心暴露了吧,其实也没啥用,每个人都可以申请

相关文章推荐

unity地形编辑扩展插件Landspace Auto Material介绍

LAM是一套针对复杂地形和植物的编辑工具, 增加了一些unity自带地形编辑器没有的功能, 对其用法做一下简单介绍。

关注CSDN程序人生公众号,轻松获得下载积分

关注公众号 在公众号里回复“”秘密“”两个字 返回 http://task.csdn.net/m/task/home?task_id=398 领取奖励提示:根据公众号里的自动回复,完成...

程序员爱Python吗?两统计平台结果争议!

对于程序员来说,哪个才是最优秀的编程语言一直有争议。而日前我们却被一条消息刷屏:发达国家的程序员更爱Python。一石激起千层浪,全球的程序员对待 Python究竟是何种态度...

面试题:8个试剂,其中一个有毒,最少多少只小白鼠能检测出有毒试剂

面试题:8个试剂,其中一个有毒,最少多少只小白鼠能检测出有毒试剂方法1:用3只小鼠,能组合成8种状态。第一只喂食【1、3、5、7】四只试剂第二只喂食【2、3、6、7】四只试剂第三只喂食【4、5、...

史上最简单的 MySQL 教程(三)「 MySQL 数据库」

MySQL 数据库MySQL 数据库是一种C\S结构的软件,即分为:客户端和服务端。若想访问服务器,必须通过客户端;服务器应该一直运行,客户端则在需要使用的时候运行。

Android开发笔记----高德地图定位

获取用户当前位置,需要配合定位SDK一起使用,本人在使用过程中,发现新旧版本的定位SDK差别很大,本人推荐使用旧版本的SDK,因为网上的许多教程都是使用旧版本的SDK进行讲解的,网上下载的源码大多数也...

最新基于高德地图的android进阶开发(4)GPS定位之POI(Point of interesting)兴趣点源码简介

1.跑了一下高德提供的POI的源码,感觉还是比较简单的,没有达到想要的效果,还有改进的空间,后面会继续更新。2.下面直接上代码,已经注释好了main.javapackage com.dragon.ar...

高德地图LBS开发定位--android客户端

*高德地图LBS开发定位–android客户端(一)*这个几乎是所有开放平台都通用的做法,无外乎注册帐号,成为开发者,然后创建一个Android应用,会为你分配一个key绑定你的服务。注册网址 环境...

高德地图 android api 实现自动定位

未经允许,禁止转载,违者必究!浣熊我最近在研究高德地图android api,看到第三章定位信息后半部分关于“如何通过MyLocationOverlay 实现自动定位”的时候我凌乱了,写得过于简单...

android中借助高德地图sdk实现基本的定位

android中借助高德地图sdk实现基本的定位

Android——高德地图实现多点连线与点击定位监听实现

最近开发的项目中需要使用到的功能,如下图所示:服务器会传来一个包含项数据类型为坐标与时间的数组。需要实现的功能有:1.按时间顺序对每个点进行连线。2.点击单个点会在点的上分di...

android开发中高德地图点聚合自定义聚合点的样式

高德点聚合

android开发中使用高德地图出现的一些问题

作为一名android开发者,地图这一块应该很多人都有碰过,我这里也简述一些自己使用碰到的一些问题(主要是高德地图 不是很喜欢百度地图)1.在使用高德地图的过程中,是要先申请key的 对应一个ap...

高德地图Android开发-环境配置

Android地图SDK简介高德地图 Android SDK 是一套地图开发调用接口,开发者可以轻松地在自己的Android应用中加入地图相关的功能,包括:地图显示(含室内、室外地图)、与地图交互...



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/111380
推荐阅读
相关标签
  

闽ICP备14008679号