先附上高德地图的文档链接:https://lbs.amap.com/api/android-sdk/summary/
1、拷贝 jar 文件至 libs 文件夹下
将下载的定位 SDK jar 文件复制到工程(此处截图以官方示例Demo为例子)的 libs 目录下,如果有老版本定位 jar 文件存在,请删除。定位 SDK 无需 so 库文件支持。如图所示:
2、配置 build.gradle 文件
在 build.gradle 文件的 dependencies 中配置 compile fileTree(include: ['*.jar'], dir: 'libs')。
1、在Project的build.gradle文件中配置repositories,添加maven或jcenter仓库地址
Android Studio默认会在Project的build.gradle为所有module自动添加jcenter的仓库地址,如果已存在,则不需要重复添加。Project的build.gradle文件在Project目录中位置如图所示:
配置如下:
allprojects { repositories { jcenter() // 或者 mavenCentral() } }
2、在主工程的build.gradle文件配置dependencies
根据项目需求添加SDK依赖。引入各个SDK功能最新版本, dependencies 配置方式如下:
SDK |
引入代码 |
---|---|
3D地图 |
compile 'com.amap.api:3dmap:latest.integration' |
2D地图 |
compile 'com.amap.api:map2d:latest.integration' |
导航 |
compile 'com.amap.api:navi-3dmap:latest.integration' |
搜索 |
compile 'com.amap.api:search:latest.integration' |
定位 |
compile 'com.amap.api:location:latest.integration' |
首先,声明Service组件
请在application标签中声明service组件,每个app拥有自己单独的定位service。
然后,声明权限
Android 6.0及以上系统可以参考Android 6.0权限说明章节。
最后,设置高德Key
在application标签中加入:
//开发者申请的key
public class MainActivity extends AppCompatActivity {
private static final float ZOOM_VALUE = 16;
private static final String TAG = "MainActivity";
private MapView mMapView;
private AMap mMap;
private AMapLocationClient mLocationClient;
private AMapLocationClientOption mLocationOption;
private LocationSource.OnLocationChangedListener mListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMapView = (MapView) findViewById(R.id.map_view);
mMapView.onCreate(savedInstanceState);
if (mMap == null) {
mMap = mMapView.getMap();
}
mMap.getUiSettings().setZoomControlsEnabled(false);
//设置地图的缩放级别
mMap.moveCamera(CameraUpdateFactory.zoomTo(ZOOM_VALUE));
//调用此方法定位
setUpMap();
}
/**
* 设置一些amap的属性
*/
private void setUpMap() {
// 自定义系统定位小蓝点
MyLocationStyle myLocationStyle = new MyLocationStyle();
// myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.location_marker));// 设置小蓝点的图标
myLocationStyle.strokeColor(Color.BLACK);// 设置圆形的边框颜色
myLocationStyle.radiusFillColor(Color.argb(100, 0, 191, 255));// 设置圆形的填充颜色
// myLocationStyle.anchor(int,int)//设置小蓝点的锚点
myLocationStyle.strokeWidth(1.0f);// 设置圆形的边框粗细
mMap.setMyLocationStyle(myLocationStyle);
mMap.setLocationSource(mLocationSource);// 设置定位监听
mMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示
mMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
}
public LocationSource mLocationSource = new LocationSource() {
@Override
public void activate(OnLocationChangedListener onLocationChangedListener) {
mListener = onLocationChangedListener;
//初始化定位
initAmapLocation();
}
@Override
public void deactivate() {
mListener = null;
if (mLocationClient != null) {
mLocationClient.stopLocation();
mLocationClient.onDestroy();
}
mLocationClient = null;
}
};
/**
* 初始化定位
*/
private void initAmapLocation() {
//初始化定位
mLocationClient = new AMapLocationClient(this);
//设置定位回调监听
mLocationClient.setLocationListener(mAMapLocationListener);
//初始化AMapLocationClientOption对象
mLocationOption = new AMapLocationClientOption();
// 设置定位场景,目前支持三种场景(签到、出行、运动,默认无场景)
mLocationOption.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.Transport);
//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。
mLocationOption.setInterval(5000);
//设置是否返回地址信息(默认返回地址信息)
mLocationOption.setNeedAddress(true);
//单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。
mLocationOption.setHttpTimeOut(20000);
if (null != mLocationClient) {
mLocationClient.setLocationOption(mLocationOption);
//设置场景模式后最好调用一次stop,再调用start以保证场景模式生效
// mLocationClient.stopLocation();
mLocationClient.startLocation();
}
}
/**
* 定位
*/
public AMapLocationListener mAMapLocationListener = new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation amapLocation) {
if (amapLocation != null) {
if (amapLocation.getErrorCode() == 0) {
//可在其中解析amapLocation获取相应内容。
mListener.onLocationChanged(amapLocation);// 显示系统小蓝点,不写这一句无法显示到当前位置
amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
amapLocation.getLatitude();//获取纬度
amapLocation.getLongitude();//获取经度
amapLocation.getAccuracy();//获取精度信息
amapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
amapLocation.getCountry();//国家信息
amapLocation.getProvince();//省信息
amapLocation.getCity();//城市信息
amapLocation.getDistrict();//城区信息
amapLocation.getStreet();//街道信息
amapLocation.getStreetNum();//街道门牌号信息
amapLocation.getCityCode();//城市编码
amapLocation.getAdCode();//地区编码
amapLocation.getAoiName();//获取当前定位点的AOI信息
amapLocation.getBuildingId();//获取当前室内定位的建筑物Id
amapLocation.getFloor();//获取当前室内定位的楼层
amapLocation.getGpsAccuracyStatus();//获取GPS的当前状态
amapLocation.getLocationDetail();//定位信息描述
amapLocation.getBearing();//获取方向角信息
amapLocation.getSpeed();//获取速度信息 单位:米/秒
amapLocation.getPoiName();//获取当前位置的POI名称
//获取定位时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(amapLocation.getTime());
sdf.format(date);
Log.e(TAG, "获取当前定位结果来源:::" + amapLocation.getLocationType());
Log.e(TAG, "获取纬度:::" + amapLocation.getLatitude());
Log.e(TAG, "获取经度:::" + amapLocation.getLongitude());
Log.e(TAG, "获取精度信息:::" + amapLocation.getAccuracy());
Log.e(TAG, "获取地址:::" + amapLocation.getAddress());
Log.e(TAG, "获取国家信息:::" + amapLocation.getCountry());
Log.e(TAG, "获取省信息:::" + amapLocation.getProvince());
Log.e(TAG, "获取城市信息:::" + amapLocation.getCity());
Log.e(TAG, "获取城区信息:::" + amapLocation.getDistrict());
Log.e(TAG, "获取街道信息:::" + amapLocation.getStreet());
Log.e(TAG, "获取街道门牌号信息:::" + amapLocation.getStreetNum());
Log.e(TAG, "获取城市编码:::" + amapLocation.getCityCode());
Log.e(TAG, "获取地区编码:::" + amapLocation.getAdCode());
Log.e(TAG, "获取当前定位点的AOI信息:::" + amapLocation.getAoiName());
Log.e(TAG, "获取当前室内定位的建筑物Id:::" + amapLocation.getBuildingId());
Log.e(TAG, "获取当前室内定位的楼层:::" + amapLocation.getFloor());
Log.e(TAG, "获取GPS的当前状态:::" + amapLocation.getGpsAccuracyStatus());
Log.e(TAG, "获取定位信息描述:::" + amapLocation.getLocationDetail());
Log.e(TAG, "获取方向角信息:::" + amapLocation.getBearing());
Log.e(TAG, "获取速度信息:::" + amapLocation.getSpeed() + "m/s");
Log.e(TAG, "获取海拔高度信息:::" + amapLocation.getAltitude());
Log.e(TAG, "获取当前位置的POI名称:::" + amapLocation.getPoiName());
} else {
//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
Log.e("AmapError", "location Error, ErrCode:" + amapLocation.getErrorCode() + ", errInfo:" + amapLocation.getErrorInfo());
}
}
}
};
}