进入高德地图开放平台注册账号,创建应用。
注册创建应用之后为应用添加key值。
在应用中导入高德地图的第三方SDK,配置清单文件(注:为了适配Android6.0以上机型,需要使用动态权限申请)。
针对以上步骤高德开放平台中有详细的说明,下面是配置代码。
- 声明AMapLocationClient对象和AMapLocationClientOption对象
//声明AMapLocationClient类对象
public AMapLocationClient mLocationClient = null;
//声明AMapLocationClientOption对象
public AMapLocationClientOption mLocationOption = null;
public void getUserPoint() {
//声明mLocationOption对象
mLocationClient = new AMapLocationClient(this);
//初始化定位参数
mLocationOption = new AMapLocationClientOption();
//设置单次定位
mLocationOption.setOnceLocation(true);
//获取最近3s内精度最高的一次定位结果:
//设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
mLocationOption.setOnceLocationLatest(true);
//设置定位监听
mLocationClient.setLocationListener(this);
//设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//设置定位间隔,单位毫秒,默认为2000ms
mLocationOption.setInterval(2000);
//设置定位参数
mLocationClient.setLocationOption(mLocationOption);
// 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
// 注意设置合适的定位时间的间隔(最小间隔支持为1000ms),并且在合适时间调用stopLocation()方法来取消定位请求
// 在定位结束后,在合适的生命周期调用onDestroy()方法
// 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
//启动定位
mLocationClient.startLocation();
}
- 配置完成之后设置请求结果回调获取当前定位的位置详情。
@Override
public void onLocationChanged(AMapLocation amapLocation){
if (amapLocation != null) {
if (amapLocation.getErrorCode() == 0) {
//定位成功回调信息,设置相关消息
amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
double latitude = amapLocation.getLatitude();//获取纬度
double longitude = amapLocation.getLongitude();//获取经度
mPoint = new DPoint(latitude,longitude);
loadData();//后续操作
} else {
//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
Log.e("AmapError", "location Error, ErrCode:"
+ amapLocation.getErrorCode() + ", errInfo:"
+ amapLocation.getErrorInfo());
}
}
}
从上面的方法中我获取到了当前用户的位置信息,并从中取出当前经纬度,声明一个坐标对象,DPoint mPoint = new DPoint(latitude,longitude)。
如果要求出两点之间的距离,同样也要将目标位置声明成一个DPoint对象,然后调用SDK中的方法
CoordinateConverter.calculateLineDistance(userPoint, dPoint);
// userPoint 我的点
// dPoint 目标点
float distance = CoordinateConverter.calculateLineDistance(userPoint, dPoint);
mDistance.setText("距您"+(int) distance + "m");
这样就能得出自己与目标点间的距离了,更多详细参数和设置方法可以参考API。
后续我还会分享一下在 Android 6.0 以上如何适配同时动态申请多个权限。