定位
7.1 单次定位
调用前由宿主完成实际的定位权限与隐私授权。userHasConsented 是宿主保存的真实结果。
SukhaLocationClient location = new SukhaLocationClient(context);
location.setPrivacyConsent(userHasConsented);
location.setLocationOption(new SukhaLocationClientOption()
.setOnceLocation(true).setLocationTimeout(15000));
location.setLocationListener(fix -> {
if (fix.getErrorCode() != 0) { report(fix.getError()); return; }
report(fix.getLatitude()); report(fix.getLongitude());
});
location.startLocation();
单次结果后自动停止采集,实例仍应在结束使用后 onDestroy()。成功错误码是 0;它不同于搜索服务的成功码 1000。不要使用失败对象中的无效坐标。
7.2 连续定位与参数
location.stopLocation();
location.setLocationOption(new SukhaLocationClientOption()
.setOnceLocation(false).setInterval(2000)
.setLocationMode(SukhaLocationClientOption.SukhaLocationMode.Hight_Accuracy)
.setNeedAddress(false));
location.startLocation();
| 配置方法 | 默认 | 有效值与含义 |
|---|---|---|
| setOnceLocation | false | true 单次,false 连续 |
| setInterval | 2000 | 1000–3600000 毫秒,期望间隔 |
| setLocationTimeout / setHttpTimeOut | 15000 | 1000–120000 毫秒 |
| setLocationMode | Hight_Accuracy | Hight_Accuracy、Battery_Saving、Device_Sensors;拼写按真实枚举 |
| setMaximumAccuracy | 正无穷 | 大于 0 的米数;默认保留基础质量过滤 |
| setOnceLocationLatest | false | 有限观察窗口内选择较优位置 |
| setBestLocationTimeout | 3000 | 1000–10000 毫秒 |
| setLocationCacheEnable | false | 是否复用有效缓存 |
| setLastLocationLifeCycle | 10000 | 缓存寿命 0–60000 毫秒 |
| setNeedAddress | false | 异步补充地址,独立地址监听接收 |
| setSensorAssistEnabled | false | 可选方向辅助 |
setAddressListener 接收后续地址结果;首次坐标不应等待地址。地址字段缺失时显示业务占位语,不拼接假省市区。方向或速度必须检查 hasBearing() / hasSpeed();缺失方向不是朝北。
7.3 显示定位蓝点
map.setMyLocationStyle(new MyLocationStyle()
.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW)
.dotColor(0xff1268e5).radiusFillColor(0x221268e5));
map.setMyLocationEnabled(true);
// 成功定位回调内:fix 为真实 SukhaLocation
android.location.Location raw = new android.location.Location("sdk");
raw.setLatitude(fix.getLatitude()); raw.setLongitude(fix.getLongitude());
raw.setAccuracy(fix.getAccuracy()); raw.setTime(fix.getTime());
map.updateMyLocation(raw);
SHOW 仅显示,LOCATE 首次回中,FOLLOW 持续跟随。输入是原始 WGS84;GCJ02 模式由地图内部转换显示。
7.4 前台服务与释放
SukhaLocationClient 自身不是前台服务,也没有可照搬的高德 enableBackgroundLocation 方法。后台持续场景由宿主合法启动并维持 location 类型前台服务,或选用 SDK 的导航/配送前台组件;权限、通知和启动时机需按目标 Android 版本处理。系统停止进程后不能保证持续定位。
停止采集调用 stopLocation();最终释放调用 onDestroy()。页面关闭是否结束持续定位由业务会话拥有者决定,不应销毁仍在服务中使用的对象。