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

使用前准备

SDK下载

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

高德地图API总结--地图加载、权限,定位_第1张图片
image.png

Jar包与库文件的使用
高德地图API总结--地图加载、权限,定位_第2张图片
image.png

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

获取Key

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

创建应用,添加key

Key名称:自定义设置

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

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

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


高德地图API总结--地图加载、权限,定位_第3张图片
image.png

AndroidManifest.xml的配置

权限配置:

 //地图包、搜索包需要的基础权限
    
    
    
    
    
    
    //定位包、导航包需要的额外权限(注:基础权限也需要)
    
    
    

配置Key值:


设置定位服务的Service


高德地图使用

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

@Override
protected void onResume() {
   super.onResume();
   mapView.onResume();
}
暂停
@Override
protected void onPause() {
   super.onPause();
   mapView.onPause();
}
重载时调用
@Override
protected void onSaveInstanceState(Bundle outState) {
   super.onSaveInstanceState(outState);
   mapView.onSaveInstanceState(outState);
}
销毁地图
@Override
protected void onDestroy() {
   super.onDestroy();
   mapView.onDestroy();
}

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

/**
 * 初始化AMap对象
 */
   if (aMap == null) {
      aMap = mapView.getMap();
    }

Xml布局引入


接口说明:

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

地图定位

高德地图API总结--地图加载、权限,定位_第4张图片
image.png

图 2.2.0

实现的接口与重写的方法

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

/**
 * 激活定位
 */
@Override
public void activate(OnLocationChangedListener listener) {
   mListener = listener;
   if (mlocationClient == null) {
      mlocationClient = new AMapLocationClient(this);
      mLocationOption = new AMapLocationClientOption();
      //设置定位监听
      mlocationClient.setLocationListener(this);
      //设置为高精度定位模式
      mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
      //设置定位参数
      mlocationClient.setLocationOption(mLocationOption);
      // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
      // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
      // 在定位结束后,在合适的生命周期调用onDestroy()方法
      // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
      mlocationClient.startLocation();
   }
}
/**
 * 停止定位
 */
@Override
public void deactivate() {
   mListener = null;
   if (mlocationClient != null) {
      mlocationClient.stopLocation();
      mlocationClient.onDestroy();
   }
   mlocationClient = null;
}

AMapLocationListenter高德定位监听

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

设置定位监听

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

设置定位间隔

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

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

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

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

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

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

//检查Adroid版本是否高于23,并判断定位权限是否开启
    private void startMyLocation() {
        if (Build.VERSION.SDK_INT >= 23) {
            int checkPermission = ContextCompat.checkSelfPermission(MapActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION);
            if (checkPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(MapActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
                return;
            } else {
                此处调用地图初始化时的定位功能
            }
        } else {
            此处调用地图初始化时的定位功能
        }
    }
返回权限请求的结果
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case 1:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //启动定位
                    此处调用地图初始化时的定位功能
                } else {
                    showToast("您禁止了定位权限,导致定位功能不可用,您可以选择使用时手动开启");
                }
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
                break;
              default:
                 super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }

Manifest.permission.ACCESS_COARSE_LOCATION定位权限

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

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

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

定位成功后回调的参数:

/**
 * 定位成功后回调函数
 */
@Override
public void onLocationChanged(AMapLocation amapLocation) {
   if (mListener != null && amapLocation != null) {
      if (amapLocation != null
            && amapLocation.getErrorCode() == 0) {
         mListener.onLocationChanged(amapLocation);// 显示系统小蓝点
      } else {
         String errText = "定位失败," + amapLocation.getErrorCode()+ ": " + amapLocation.getErrorInfo();
         Log.e("AmapErr",errText);
      }
   }
}

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

你可能感兴趣的:(高德地图API总结--地图加载、权限,定位)