定位
全局 Location API 提供对设备地理位置信息的访问能力,包括一次性定位、逆地理编码、用户手动选点、定位精度控制、以及用于小组件的权限检测等功能。
功能概览
你可以通过该 API 实现以下功能:
- 获取设备当前位置(支持缓存)
- 用户通过地图界面手动选择位置
- 将经纬度转换为可读的地址(逆地理编码)
- 设置定位精度(耗电量和等待时间可控)
- 检查小组件是否获得定位权限
注意: 该 API 为全局 API,无需额外导入。
接口文档
Location.isAuthorizedForWidgetUpdates(): Promise<boolean>
检查小组件是否拥有获取定位更新的权限。
Location.setAccuracy(accuracy: LocationAccuracy): Promise<void>
设置期望的定位精度。精度越高,耗电和等待时间也可能增加。
可选值
Location.requestCurrent(options?: { forceRequest?: boolean }): Promise<LocationInfo | null>
请求一次设备当前的位置信息。
默认情况下,如果存在缓存位置(例如启动时从系统获取到的位置),将立即返回该缓存值。如果未缓存,则会触发新的定位请求。
你可以通过传入 { forceRequest: true } 强制跳过缓存,始终发起新请求。
参数
Location.pickFromMap(): Promise<LocationInfo | null>
打开内置地图界面,允许用户手动选择一个位置。
Location.reverseGeocode(options): Promise<LocationPlacemark[] | null>
将经纬度转换为人类可读的地理信息(如街道、城市、国家等)。
参数
类型定义
LocationAccuracy
表示定位精度选项:
LocationInfo
表示一个带有时间戳的地理坐标点:
LocationPlacemark
表示一个可读的地理位置,通常由逆地理编码返回,包含详细的地址结构信息:
字段说明
示例用法
逆地理编码
地址格式化工具
最佳实践与使用建议
- 使用
areasOfInterest和name显示更友好的位置信息(如地标名) - 使用
postalCode、locality、administrativeArea自动填写表单或记录标签 - 使用
timestamp判断位置数据是否新鲜 - 使用
timeZone进行本地时间转换或事件提醒 - 在调用
requestCurrent前使用setAccuracy控制精度 - 对小组件使用
isAuthorizedForWidgetUpdates()检查权限
说明
- 逆地理编码可能返回多个结果,通常第一个最相关
- 若获取失败,API 将返回
null - 若未强制刷新,系统会优先使用缓存位置,响应更快
- 小组件受限于系统权限机制,务必检测权限状态
