快速开始

本文档帮助您在完成工程配置后,用最少的代码快速跑通定位功能。

如果尚未完成 Key 申请、Gradle 依赖、权限配置等工程准备工作,请先参考 创建工程



隐私合规(必须)

在调用 SDK 任何接口前,必须先完成隐私合规设置,否则 SDK 将无法正常工作:

TencentLocationManager.setUserAgreePrivacy(true);

详见 隐私合规接口

连续定位

// 1. 获取定位管理器实例(建议全局复用,避免反复创建)
TencentLocationManager manager = TencentLocationManager.getInstance(context);

// 2. 配置定位请求
TencentLocationRequest request = TencentLocationRequest.create();
request.setInterval(5000);        // 定位间隔 5 秒
request.setAllowGPS(true);        // 允许使用 GPS
request.setRequestLevel(TencentLocationRequest.REQUEST_LEVEL_NAME); // 获取经纬度+名称+地址

// 3. 创建定位监听器
TencentLocationListener listener = new TencentLocationListener() {
    @Override
    public void onLocationChanged(TencentLocation location, int error, String reason) {
        if (error == TencentLocation.ERROR_OK) {
            double latitude = location.getLatitude();   // 纬度
            double longitude = location.getLongitude();  // 经度
            float accuracy = location.getAccuracy();     // 精度(米)
            String name = location.getName();            // 位置名称
            String address = location.getAddress();      // 地址信息
        } else {
            // 定位失败,根据 error 错误码排查原因
        }
    }

    @Override
    public void onStatusUpdate(String name, int status, String desc) {
        // GPS、Wi-Fi、Cell 等定位源状态变化回调
    }
};

// 4. 启动定位(在后台线程处理回调)
HandlerThread handlerThread = new HandlerThread("LocationThread");
handlerThread.start();
int result = manager.requestLocationUpdates(request, listener, handlerThread.getLooper());

// 5. 停止定位(不再需要时务必调用,避免不必要的电量消耗)
manager.removeUpdates(listener);

单次定位

TencentLocationManager manager = TencentLocationManager.getInstance(context);

HandlerThread handlerThread = new HandlerThread("LocationThread");
handlerThread.start();

manager.requestSingleFreshLocation(new TencentLocationListener() {
    @Override
    public void onLocationChanged(TencentLocation location, int error, String reason) {
        if (error == TencentLocation.ERROR_OK) {
            double latitude = location.getLatitude();
            double longitude = location.getLongitude();
            String address = location.getAddress();
        }
    }

    @Override
    public void onStatusUpdate(String name, int status, String desc) {}
}, handlerThread.getLooper());

// 单次定位完成后自动停止,无需手动调用 removeUpdates

请求级别说明

定位请求可通过 setRequestLevel 设置不同的信息详细程度:

级别 常量 返回内容
0 REQUEST_LEVEL_GEO 仅经纬度
1 REQUEST_LEVEL_NAME 经纬度 + 位置名称 + 地址
3 REQUEST_LEVEL_ADMIN_AREA 经纬度 + 行政区划 + 地址 + 名称
4 REQUEST_LEVEL_POI 经纬度 + 行政区划 + 附近 POI

级别越高,返回的信息越详细。

回调错误码

错误码 含义
ERROR_OK 0 定位成功
ERROR_NETWORK 1 网络问题引起的定位失败
ERROR_BAD_JSON 2 GPS、Wi-Fi 或基站错误引起的定位失败:
1、用户的手机确实采集不到定位凭据,比如偏远地区、地下车库、电梯内等;
2、开关跟权限问题,比如用户关闭了位置信息、关闭了 Wi-Fi、未授予 App 定位权限等
ERROR_WGS84 4 无法将 WGS84 坐标转换成 GCJ-02 坐标时的定位失败
ERROR_UNKNOWN 404 未知原因引起的定位失败

下一步

本页内容