Appearance
获取位置
前置条件
在调用定位能力前,请确保已完成以下步骤:
- 已完成隐私协议声明与授权。
- 已完成鉴权初始化(参考上一章节)。
- 已申请并通过运行时定位权限(尤其是 Android 6.0+)。
快速使用
支持两种定位场景:导航场景、非导航场景(默认)。
- 导航场景:推荐司机端使用,会结合速度、方向、角度等信息提升轨迹与定位效果。
- 非导航场景:推荐乘客端使用,请求更轻量,功耗和流量更低。
java
// 1) 创建 client(建议传入 Activity/Application Context,内部会转为 Application Context)
DMapLocationClient locationClient = new DMapLocationClient(this);
// 2) 设置回调
locationClient.setLocationListener(dMapLocation -> {
if (dMapLocation.getErrorCode() == DMapLocation.ErrorCode.SUCCESS) {
dLogLocs(new Date().toLocaleString() + ":\n" + dMapLocation.toString());
} else {
dLogLocs("DMap location error, code=" + dMapLocation.getErrorCode()
+ ", info=" + dMapLocation.getErrorInfo());
}
});
// 3) 设置定位参数(务必在 startLocation 之前调用)
DMapLocationClientOption option = new DMapLocationClientOption();
option.setNaviMode(true); // 导航场景,默认 false
option.setInterval(DMapLocationClientOption.IntervalMode.NORMAL); // 默认 NORMAL(3 秒)
// option.setOnceLocation(true); // 单次定位(默认连续定位)
locationClient.setLocationOption(option);
// 4) 启动定位
locationClient.startLocation();
// 5) 结束定位(建议在 onDestroy 或不再需要定位时调用)
locationClient.stopLocation();定位设置
在启动定位开始前,需要通过DMapLocationClientOption类型设置定位所需的必要参数。下面对这些设置参数进行详细介绍。
| 配置项 | 默认值 | 说明 |
|---|---|---|
setOnceLocation(boolean) | false | true 表示单次定位,false 表示连续定位 |
setInterval(IntervalMode) | NORMAL | 控制定位的间隔,IntervalMode,包含HIGH_FREQUENCY(1s)、NORMAL(3s)、LOW_FREQUENCY(9s)、BATTERY_SAVE(36s)几种选择 |
setNaviMode(boolean) | false | true 启用导航模式融合定位 |
定位结果
定位结果通过 DMapLocationListener#onLocationChanged 返回,无论成功或失败都会回调同一个对象 DMapLocation。
DMapLocation 字段说明
| 方法 | 返回类型 | 说明 |
|---|---|---|
getErrorCode() | ErrorCode | 错误码,SUCCESS 表示定位成功,否则为失败原因 |
getErrorInfo() | String | 错误描述信息,成功时为 null |
getLatitude() | double | 纬度,GCJ-02 坐标系 |
getLongitude() | double | 经度,GCJ-02 坐标系 |
getAccuracy() | double | 定位精度(米) |
getLocationType() | LocationType | 定位类型,详见下表 |
getTime() | long | 定位时间戳(毫秒) |
getSpeed() | float | 当前速度(m/s) |
getBearing() | float | 方向角(度,0~360,正北为 0) |
getCityId() | String | 城市 ID,无法获取时为 "-1" |
getCityName() | String | 城市名称,无法获取时为 "null" |
LocationType 说明
| 枚举值 | 说明 |
|---|---|
GPS | 系统 GPS 定位 |
DIDI_FLP | 滴滴融合定位 |
DIDI_WIFI | 滴滴网络(Wi-Fi)定位 |
DIDI_CELL | 滴滴基站定位 |
NLP | 系统网络定位 |
FAIL | 定位失败,缺省类型 |
调用时序与注意事项
- 推荐顺序:
new client->setLocationListener->setLocationOption->startLocation->stopLocation。 setLocationOption需要在startLocation前调用;启动后再设置会返回false。- 单次定位模式下,业务结束后也建议主动调用
stopLocation()进行状态收敛,便于后续再次startLocation()。 - 页面销毁或不再需要定位时务必调用
stopLocation(),避免不必要的资源开销。 getLastKnownLocation()仅代表最近缓存,不保证实时性。