一、Location Kit 服务1.1 定位技术位置子系统使用多种定位技术提供服务定位技术说明精度GNSS定位基于GPS、GLONASS、北斗、Galileo等导航卫星高基站定位根据设备当前驻网基站和相邻基站位置估算较低WLAN/蓝牙定位根据周围WLAN、蓝牙设备位置估算依赖设备分布密度注意定位过程具体使用哪些定位系统取决于用户设备的硬件能力。1.2 坐标系统系统以1984年世界大地坐标系统WGS-84为参考使用经度、纬度数据描述地球上的一个位置。说明本模块能力仅支持WGS-84坐标系。如需转换成其他坐标系请参考坐标转换工具。1.3 扩展功能功能说明地理围栏虚拟地理边界当设备进入/离开特定区域时接收通知正地理编码根据地址获取地点的经纬度逆地理编码获取经纬度对应的地点信息二、限制2.1 基本要求要求说明位置开关用户必须主动开启位置开关否则系统不提供定位服务权限申请应用必须向用户申请位置访问权限敏感数据主动请求应用需主动发起请求并在业务结束时主动结束2.2 设备能力设备类型定位能力有定位芯片GNSS定位能力无定位芯片但有WLAN/蜂窝网络WLAN定位、基站定位能力2.3 支持的设备设备类型支持Phone✅Tablet✅PC/2in1✅Wearable✅2.4 支持的国家/地区设备类型支持地区Wearable特定国家和地区见附录其他设备仅中国境内不含港澳台三、核心接口接口功能描述on(locationChange)开启位置变化订阅并发起定位请求off(locationChange)关闭位置变化订阅并删除对应的定位请求getCurrentLocation()获取当前位置callback/PromisegetLastLocation()获取最近一次定位结果isLocationEnabled()判断位置服务是否已经开启四、开发步骤4.1 导入模块import { geoLocationManager } from kit.LocationKit; import { BusinessError } from kit.BasicServicesKit;4.2 判断位置开关状态try { let locationEnabled geoLocationManager.isLocationEnabled(); console.info(位置开关状态: locationEnabled); } catch (err) { console.error(errCode: err.code , message: err.message); }提示如果位置开关未开启可以调用requestGlobalSwitch拉起全局开关设置弹框引导用户打开位置开关。4.3 获取设备位置信息方式一获取系统缓存的最新位置推荐优先使用该接口获取位置可以减少系统功耗。try { let location geoLocationManager.getLastLocation(); console.info(缓存位置: JSON.stringify(location)); } catch (err) { console.error(errCode: JSON.stringify(err)); }注意如果系统当前没有缓存位置会返回错误码。如果对位置的新鲜度比较敏感可以先获取缓存位置将位置中的时间戳与当前时间对比若不满足预期再使用方式二获取位置。方式二单次获取当前位置SingleLocationRequest定位策略选择策略适用场景说明PRIORITY_ACCURACY对精度要求较高将一段时间内精度较好的结果返回PRIORITY_LOCATING_SPEED对定位速度要求较高将最先拿到的定位结果返回注意两种定位策略均会同时使用GNSS定位和网络定位技术室内和户外场景均可获取位置结果但对硬件资源消耗较大功耗也较大。超时时间建议建议设置为10秒设备环境、状态、系统功耗管控策略等会影响定位返回时延。let request: geoLocationManager.SingleLocationRequest { locatingPriority: geoLocationManager.LocatingPriority.PRIORITY_LOCATING_SPEED, locatingTimeoutMs: 10000 // 10秒 } try { geoLocationManager.getCurrentLocation(request).then((result) { console.info(当前位置: JSON.stringify(result)); }).catch((error: BusinessError) { console.error(getCurrentLocation error: JSON.stringify(error)); }); } catch (err) { console.error(errCode: JSON.stringify(err)); }4.4 持续定位ContinuousLocationRequest多用于导航、运动轨迹、出行等场景。参数参数说明interval上报位置信息的时间间隔单位秒默认1秒locationScenario应用使用场景如NAVIGATION场景参数UserActivityScenario场景说明NAVIGATION导航场景可持续在室内和室外获取位置let request: geoLocationManager.ContinuousLocationRequest { interval: 1, locationScenario: geoLocationManager.UserActivityScenario.NAVIGATION } let locationCallback (location: geoLocationManager.Location): void { console.info(位置更新: JSON.stringify(location)); }; try { geoLocationManager.on(locationChange, request, locationCallback); } catch (err) { console.error(errCode: JSON.stringify(err)); }4.5 结束定位说你如果不主动结束定位可能导致设备功耗高、耗电快。建议在不需要获取定位信息时及时结束定位。// 需要与on接口传入的回调函数保持一致 geoLocationManager.off(locationChange, locationCallback);五、定位策略对比策略适用场景精度速度功耗PRIORITY_ACCURACY签到打卡、服务推荐高慢高PRIORITY_LOCATING_SPEED快速定位需求中快高