本文档帮助您在完成工程配置后,用最少的代码快速跑通定位功能。
如果尚未完成 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 |
级别越高,返回的信息越详细。
| 错误码 | 值 | 含义 |
|---|---|---|
| 0 | 定位成功 | |
| 1 | 网络问题引起的定位失败 | |
| 2 | GPS、Wi-Fi 或基站错误引起的定位失败: 1、用户的手机确实采集不到定位凭据,比如偏远地区、地下车库、电梯内等; 2、开关跟权限问题,比如用户关闭了位置信息、关闭了 Wi-Fi、未授予 App 定位权限等 |
|
| 4 | 无法将 WGS84 坐标转换成 GCJ-02 坐标时的定位失败 | |
| 404 | 未知原因引起的定位失败 |
有帮助
没帮助