Android高德地图SDK开发:
高德开发者平台官网:http://developer.amap.com/
开发文档:http://developer.amap.com/api/android-sdk/summary/
过程可以照着开发文档走
下面讲主要流程和一些注意的事项
1 创建账号,去个人中心中创建应用
添加新Key
若仅为调试使用(不发布),则这里的发布版SHA1 和 调试版SHA1 的值可以同一个值,同为调试的SHA1,发布的时候再把 发布版的sha1更改
调试版SHA1获取方式参考:http://lbs.amap.com/faq/top/hot-questions/249
发行版的SHA1获取方式:
第一步、打开Android Studio的Terminal工具
第二步、输入命令:keytool -v -list -keystore keystore文件路径
第三步、输入Keystore密码
PackageName就不赘述了
一个Key只能对应一个应用 (一个高德地图里创建的应用也是一个你的项目的应用(一个包))
2 通过手动的方式添加lib
在官网下载:http://lbs.amap.com/api/android-sdk/download/
将相关jar包导入自己的项目中: (这里使用的是3D的地图 和定位 搜索功能)
Gradle方式参考:http://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-create-project
3 创建jniLibs目录(在项目的包级下)
添加so库
注:3D地图才需要添加so库,2D地图无需这一步骤
Gradle方式参考:http://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-create-project
4 application标签中
加你的key
<!-- 地图的key -->
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="你的key">
</meta-data>
5 添加权限
要检查是否与原项目的权限配置重复 重复则删去
权限参考:http://developer.amap.com/api/android-sdk/guide/create-map/show-map
开始使用
6 xml中
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
7 java中
声明
MapView mMapView;
AMap aMap;
public UiSettings mUiSettings;
MyLocationStyle myLocationStyle;
//声明AMapLocationClient类对象
AMapLocationClient mLocationClient = null;
//声明当前经纬度
private double currentLat,currentLon;
// 当前位置
LatLng currentLatLng;
// 设置一个flag 当 第一次进入地图 去将当前位置作为屏幕中心点
private boolean flag=true;
oncreate()中:
mMapView = findViewById(R.id.map); // 与xml中的对应
mMapView.onCreate(savedInstanceState);// 此方法必须重写
checkGps();
initMap();
/**
* 初始化
*/
private void initMap() {
if (aMap == null) {
aMap = mMapView.getMap();
mUiSettings = aMap.getUiSettings();
aMap.getUiSettings().setLogoBottomMargin(-23); //将LOGO 和 比例尺 往下移
}
setUpMap();
customMyLocationStyle();
setMyLocation();
}
/**
* 设置一些amap的属性
*/
private void setUpMap() {
//显示比例尺
mUiSettings.setScaleControlsEnabled(true);
//显示指南针
mUiSettings.setCompassEnabled(true);
// 显示定位按钮
aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示 默认不显示
}
/**
* 设置自定义的定位风格样式 更多的风格参考官网
*/
private void customMyLocationStyle(){
myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类 默认为 连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。
myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
customLocationIcon();
aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
}
/**
* 设置自定义定位图标和外圆样式
*/
private void customLocationIcon(){
//设置图标
BitmapDescriptor bitmaplocation = BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(MapActivity.this.getResources(),
R.mipmap.location_3));
myLocationStyle.myLocationIcon(bitmaplocation);//设置定位蓝点的icon图标方法,需要用到BitmapDescriptor类对象作为参数
myLocationStyle.strokeColor(Color.GRAY); //设置定位蓝点精度圆圈的边框颜色的方法。 int 类型的
// myLocationStyle.radiusFillColor(Color.BLUE);//设置定位蓝点精度圆圈的填充颜色的方法 默认为紫色
}
/**
* 初始化定位并获取回调
*/
private void setMyLocation(){
//初始化定位
mLocationClient = new AMapLocationClient(MapActivity.this);
//设置定位回调监听
mLocationClient.setLocationListener(mLocationListener);
//启动定位
mLocationClient.startLocation();
}
/**
* 定位回调监听器
*/
public AMapLocationListener mLocationListener = new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation amapLocation) {
// 从这里开始就会持续回调
if (checkGps()) {
if (amapLocation != null) {
if (amapLocation.getErrorCode() == 0) {
//定位成功回调信息,设置相关消息
amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
currentLat = amapLocation.getLatitude();//获取纬度
currentLon = amapLocation.getLongitude();//获取经度
currentLatLng = new LatLng(currentLat, currentLon);
amapLocation.getAccuracy();//获取精度信息
Log.i("mylocation", "currentLat : " + currentLat + " currentLon : " + currentLon);
if (flag) {
// 将当前位置移至屏幕中心 设置了flag并且设置了上面的定位模式 这里就只一次
aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLatLng, 17));
flag = false;
}
} else {
//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
Log.e("AmapError", "location Error, ErrCode:"
+ amapLocation.getErrorCode() + ", errInfo:"
+ amapLocation.getErrorInfo());
}
}
}
}
};
停止,结束等生命周期与Activity关联:
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mMapView.onDestroy();
mLocationClient.onDestroy();//销毁定位客户端。
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
// TODO Auto-generated method stub
//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
mMapView.onPause();
//mLocationClient.stopLocation();//停止定位
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
mMapView.onSaveInstanceState(outState);
}
检查GPS是否开启
private boolean checkGps(){
if (!IsGpsWork.isGpsEnabled(this)){
Toast toast = Toast.makeText(this, getString(R.string.hasNotOpenGps), Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
return false;
}else {
return true;
}
}
IsGpsWork 类:
public class IsGpsWork {
//判断GPS是否开启
public static boolean isGpsEnabled(Context context) {
LocationManager locationManager = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);
// 判断GPS模块是否开启
return locationManager != null && locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
}
逆地址编码(经纬度->详细文字描述(省市区街道等))
参考:http://blog.csdn.net/weixin_37577039/article/details/79177992