Skip to content

获取位置

前置条件

在调用定位能力前,请确保已完成以下步骤:

  1. 已完成隐私协议声明与授权。
  2. 已完成鉴权初始化(参考上一章节)。
  3. 已申请并通过运行时定位权限(尤其是 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)falsetrue 表示单次定位,false 表示连续定位
setInterval(IntervalMode)NORMAL控制定位的间隔,IntervalMode,包含HIGH_FREQUENCY(1s)、NORMAL(3s)、LOW_FREQUENCY(9s)、BATTERY_SAVE(36s)几种选择
setNaviMode(boolean)falsetrue 启用导航模式融合定位

定位结果

定位结果通过 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定位失败,缺省类型

调用时序与注意事项

  1. 推荐顺序:new client -> setLocationListener -> setLocationOption -> startLocation -> stopLocation
  2. setLocationOption 需要在 startLocation 前调用;启动后再设置会返回 false
  3. 单次定位模式下,业务结束后也建议主动调用 stopLocation() 进行状态收敛,便于后续再次 startLocation()
  4. 页面销毁或不再需要定位时务必调用 stopLocation(),避免不必要的资源开销。
  5. getLastKnownLocation() 仅代表最近缓存,不保证实时性。