当前位置:   article > 正文

高德地图API总结--地图加载、权限,定位

高德的权限plugin=amap.polygoneditor,amap.circleeditor,amap.riding,amap.movea

使用前准备

SDK下载

地址:<u>http://lbs.amap.com/api/android-sdk/down/</u>

image.png

Jar包与库文件的使用
image.png

在项目中按照如上方法使用高德地图的库文件和jar包
AMap_3DMap….jar---使用高德3D地图的jar包
AMap_Location….jar---定位相关功能使用的jar包
此外还有:
搜索使用的jar包
image.png

获取Key

登陆高德地图API <u>http://lbs.amap.com/dev/#/</u> 控制台

创建应用,添加key

Key名称:自定义设置

服务平台:填写对应的开发平台,这里是Android

发布版安全码SHA1:开发的APP的SHA码

Package:这里填写包名,要填写使用的app的包名

image.png

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" />

配置Key值:

  1. <meta-data
  2. android:name="com.amap.api.v2.apikey"
  3. android:value="4048e214cf637ef2931e517a8dd2cecc" />
  4. 设置定位服务的Service
  5. <!-- 定位需要的服务 使用2.0的定位需要加上这个 -->
  6. <service android:name="com.amap.api.location.APSService" />

高德地图使用

定义MapView
private MapView mapView;
先获取布局中的mapview的id,然后创建实例,具体如下:
mapView = (MapView) findViewById(R.id.mapview);
mapView.onCreate(savedInstanceState);// 此方法必须重写
在使用map的activity中必须重写一下方法:

  1. @Override
  2. protected void onResume() {
  3. super.onResume();
  4. mapView.onResume();
  5. }
  6. 暂停
  7. @Override
  8. protected void onPause() {
  9. super.onPause();
  10. mapView.onPause();
  11. }
  12. 重载时调用
  13. @Override
  14. protected void onSaveInstanceState(Bundle outState) {
  15. super.onSaveInstanceState(outState);
  16. mapView.onSaveInstanceState(outState);
  17. }
  18. 销毁地图
  19. @Override
  20. protected void onDestroy() {
  21. super.onDestroy();
  22. mapView.onDestroy();
  23. }

在整个activity生命周期中实现对MapView的控制
其次初始化map对象

  1. /**
  2. * 初始化AMap对象
  3. */
  4. if (aMap == null) {
  5. aMap = mapView.getMap();
  6. }

Xml布局引入

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

接口说明:

MapView 一个显示地图的视图(View)。它负责从服务端获取地图数据。当屏幕焦点在这个视图上时,它将会捕捉键盘事件(如果手机配有实体键盘)及屏幕触控手势事件。 使用这个类必须按照它的生命周期进行操控,你必须参照以下方法onCreate(Bundle)、 onResume()、onPause()、onDestroy()、onSaveInstanceState(Bundle)、onLowMemory() 当MapView初始化完成后,用户可以通过getMap()方法获得一个AMap 对象。如果MapView 没有初始成功,则执行getMap()将返回null
AMap定义AMap 地图对象的操作方法与接口

地图定位

image.png

图 2.2.0

实现的接口与重写的方法

方法需要继承
implements LocationSource,AMapLocationListener
LocationSource重写LocationSource的两个方法,目的是是让地图显示定位地点。(如下:激活定位activate、停止定位deactivate,其中deactivate需要在activity的onPause中调用释放定位占用的资源)

  1. /**
  2. * 激活定位
  3. */
  4. @Override
  5. public void activate(OnLocationChangedListener listener) {
  6. mListener = listener;
  7. if (mlocationClient == null) {
  8. mlocationClient = new AMapLocationClient(this);
  9. mLocationOption = new AMapLocationClientOption();
  10. //设置定位监听
  11. mlocationClient.setLocationListener(this);
  12. //设置为高精度定位模式
  13. mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
  14. //设置定位参数
  15. mlocationClient.setLocationOption(mLocationOption);
  16. // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
  17. // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
  18. // 在定位结束后,在合适的生命周期调用onDestroy()方法
  19. // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
  20. mlocationClient.startLocation();
  21. }
  22. }
  23. /**
  24. * 停止定位
  25. */
  26. @Override
  27. public void deactivate() {
  28. mListener = null;
  29. if (mlocationClient != null) {
  30. mlocationClient.stopLocation();
  31. mlocationClient.onDestroy();
  32. }
  33. mlocationClient = null;
  34. }

AMapLocationListenter高德定位监听

  1. ##定义AMap 地图对象的操作方法与接口。
  2. private AMap aMap;

设置定位监听

  1. aMap.setLocationSource(this);// 设置定位监听
  2. // 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
  3. aMap.setMyLocationEnabled(true);

设置定位间隔

  1. 使用AMapLocationClientOption中的setinterval方法,
  2. private AMapLocationClientOption mLocationOption;
  3. mLocationOption = new AMapLocationClientOption();
  4. mLocationOption.setInterval(2000);//设置间隔时间

设置当前定位模式:
定位类型总共有三种模式,定位,跟随和旋转

  1. // 设置定位的类型为定位模式
  2. aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);
  3. // 设置定位的类型为 跟随模式
  4. aMap.setMyLocationType(AMap.LOCATION_TYPE_MAP_FOLLOW);
  5. // 设置定位的类型为根据地图面向方向旋转
  6. aMap.setMyLocationType(AMap.LOCATION_TYPE_MAP_ROTATE);

使用方式的确定根据需要确定定位模式,更随模式和旋转模式
定位图标
使用高德原生定位图标,此方法的实现只要一行代码便可以实现,较为简单
方法:aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置、
如果发现自定义图标不怎么美观,我们也可以使用自定义图标,可以随意定义,实现如下:

  1. aMap.getUiSettings().setMyLocationButtonEnabled(false);// 设置默认定位按钮是否显示
  2. //设置地图定位图标
  3. MyLocationStyle myLocationStyle = new MyLocationStyle();
  4. myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.mapshow_location));//设置图标样式
  5. //以下两行设置定位图标周围的圆圈背景为透明
  6. myLocationStyle.radiusFillColor(android.R.color.transparent);
  7. myLocationStyle.strokeColor(android.R.color.transparent);
  8. //实现图标样式
  9. aMap.setMyLocationStyle(myLocationStyle);

自定义图标的自由度较高,可以根据不同的需要设置不同的图标样式,在使用时我们需要先把地图中本身的图标设置为false:aMap.getUiSettings().setMyLocationButtonEnabled(false);使地图自带的图标不显示,然后设置我们想要的图标的样式
以上方法需要的地图初始化的时候统一调用
注;android6.0级以上版本需要先获取定位权限
获取权限的代码:

  1. //检查Adroid版本是否高于23,并判断定位权限是否开启
  2. private void startMyLocation() {
  3. if (Build.VERSION.SDK_INT >= 23) {
  4. int checkPermission = ContextCompat.checkSelfPermission(MapActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION);
  5. if (checkPermission != PackageManager.PERMISSION_GRANTED) {
  6. ActivityCompat.requestPermissions(MapActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
  7. return;
  8. } else {
  9. 此处调用地图初始化时的定位功能
  10. }
  11. } else {
  12. 此处调用地图初始化时的定位功能
  13. }
  14. }
  15. 返回权限请求的结果
  16. public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
  17. switch (requestCode) {
  18. case 1:
  19. if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  20. //启动定位
  21. 此处调用地图初始化时的定位功能
  22. } else {
  23. showToast("您禁止了定位权限,导致定位功能不可用,您可以选择使用时手动开启");
  24. }
  25. super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  26. break;
  27. default:
  28. super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  29. }
  30. }

Manifest.permission.ACCESS_COARSE_LOCATION定位权限

自定义按钮实现回到当前位置的方法

高德地图只提供了自身的一个定位回到当前位置的按钮,API未提供接口方法;如果不适用高德地图自定义的按钮,可以参考一下方法进行实现回到当前位置的自定义方法:

  1. //定位按钮实现定位
  2. public void BackMyLocation() {
  3. //判断地图定位返回,是否为空
  4. if (aMap.getMyLocation() != null) {
  5. //获取定位点的经纬度坐标
  6. Dlongitude = aMap.getMyLocation().getLongitude();
  7. DLatitude = aMap.getMyLocation().getLatitude();
  8. LatLng start = new LatLng(DLatitude, Dlongitude);
  9. //实现移动到定位点的功能
  10. aMap.moveCamera(CameraUpdateFactory.changeLatLng(start));
  11. aMap.moveCamera(CameraUpdateFactory.zoomTo(10));
  12. } else {
  13. showToast("正在定位,请检查网络或者定位权限是否开启");
  14. }
  15. }

定位成功后回调的参数:

  1. /**
  2. * 定位成功后回调函数
  3. */
  4. @Override
  5. public void onLocationChanged(AMapLocation amapLocation) {
  6. if (mListener != null && amapLocation != null) {
  7. if (amapLocation != null
  8. && amapLocation.getErrorCode() == 0) {
  9. mListener.onLocationChanged(amapLocation);// 显示系统小蓝点
  10. } else {
  11. String errText = "定位失败," + amapLocation.getErrorCode()+ ": " + amapLocation.getErrorInfo();
  12. Log.e("AmapErr",errText);
  13. }
  14. }
  15. }

以前写的文章没有发表的,仅供参考和学习只用
谢谢惠顾,感觉有用的点个赞

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

闽ICP备14008679号