1# Location 2 3 4## 概述 5 6提供用于查询位置开关状态、启动和停止定位的功能。 7 8**起始版本:** 13 9 10 11## 汇总 12 13 14### 文件 15 16| 名称 | 描述 | 17| -------- | -------- | 18| [oh_location.h](oh__location_8h.md) | 定义查询位置开关状态、启动定位、停止定位的接口。 | 19| [oh_location_type.h](oh__location__type_8h.md) | 定义位置服务常用的属性。 | 20 21 22### 结构体 23 24| 名称 | 描述 | 25| -------- | -------- | 26| struct [Location_BasicInfo](_location___basic_info.md) | 定义位置基本信息的结构体。 | 27 28 29### 类型定义 30 31| 名称 | 描述 | 32| -------- | -------- | 33| typedef enum [Location_ResultCode](#location_resultcode-1) [Location_ResultCode](#location_resultcode) | 定义位置服务的错误码。 | 34| typedef enum [Location_UseScene](#location_usescene-1) [Location_UseScene](#location_usescene) | 定义位置请求中的用户活动场景类型。 | 35| typedef enum [Location_PowerConsumptionScene](#location_powerconsumptionscene-1) [Location_PowerConsumptionScene](#location_powerconsumptionscene) | 定义位置请求中的功耗场景类型。 | 36| typedef enum [Location_SourceType](#location_sourcetype-1) [Location_SourceType](#location_sourcetype) | 定义位置信息的来源。 | 37| typedef struct [Location_BasicInfo](_location___basic_info.md) [Location_BasicInfo](#location_basicinfo) | 定义位置基本信息的结构体。 | 38| typedef struct [Location_Info](#location_info) [Location_Info](#location_info) | 定义位置信息的结构体。 | 39| typedef void(\* [Location_InfoCallback](#location_infocallback)) ([Location_Info](#location_info) \*location, void \*userData) | 用于接收位置上报的回调函数。 | 40| typedef struct [Location_RequestConfig](#location_requestconfig) [Location_RequestConfig](#location_requestconfig) | 定义位置请求参数的结构体。 | 41 42 43### 枚举 44 45| 名称 | 描述 | 46| -------- | -------- | 47| [Location_ResultCode](#location_resultcode-1) {<br/>LOCATION_SUCCESS = 0, LOCATION_PERMISSION_DENIED = 201, LOCATION_INVALID_PARAM = 401, LOCATION_NOT_SUPPORTED = 801,<br/>LOCATION_SERVICE_UNAVAILABLE = 3301000, LOCATION_SWITCH_OFF = 3301100<br/>} | 定义位置服务的错误码。 | 48| [Location_UseScene](#location_usescene-1) { LOCATION_USE_SCENE_NAVIGATION = 0x0401, LOCATION_USE_SCENE_SPORT = 0x0402, LOCATION_USE_SCENE_TRANSPORT = 0x0403, LOCATION_USE_SCENE_DAILY_LIFE_SERVICE = 0x0404 } | 定义位置请求中的用户活动场景类型。 | 49| [Location_PowerConsumptionScene](#location_powerconsumptionscene-1) { LOCATION_HIGH_POWER_CONSUMPTION = 0x0601, LOCATION_LOW_POWER_CONSUMPTION = 0x0602, LOCATION_NO_POWER_CONSUMPTION = 0x0603 } | 定义位置请求中的功耗场景类型。 | 50| [Location_SourceType](#location_sourcetype-1) { LOCATION_SOURCE_TYPE_GNSS = 1, LOCATION_SOURCE_TYPE_NETWORK = 2, LOCATION_SOURCE_TYPE_INDOOR = 3, LOCATION_SOURCE_TYPE_RTK = 4 } | 定义位置信息的来源。 | 51 52 53### 函数 54 55| 名称 | 描述 | 56| -------- | -------- | 57| [Location_ResultCode](#location_resultcode-1) [OH_Location_IsLocatingEnabled](#oh_location_islocatingenabled) (bool \*enabled) | 查询位置开关是否开启。 | 58| [Location_ResultCode](#location_resultcode-1) [OH_Location_StartLocating](#oh_location_startlocating) (const [Location_RequestConfig](#location_requestconfig) \*requestConfig) | 启动定位并订阅位置变化。 | 59| [Location_ResultCode](#location_resultcode-1) [OH_Location_StopLocating](#oh_location_stoplocating) (const [Location_RequestConfig](#location_requestconfig) \*requestConfig) | 停止定位并取消订阅位置变化。 | 60| [Location_BasicInfo](_location___basic_info.md) [OH_LocationInfo_GetBasicInfo](#oh_locationinfo_getbasicinfo) ([Location_Info](#location_info) \*location) | 获取位置基本信息。 | 61| [Location_ResultCode](#location_resultcode-1) [OH_LocationInfo_GetAdditionalInfo](#oh_locationinfo_getadditionalinfo) ([Location_Info](#location_info) \*location, char \*additionalInfo, uint32_t length) | 获取位置信息中的附加信息。 | 62| [Location_RequestConfig](#location_requestconfig) \* [OH_Location_CreateRequestConfig](#oh_location_createrequestconfig) (void) | 创建一个位置请求参数结构体实例。 | 63| void [OH_Location_DestroyRequestConfig](#oh_location_destroyrequestconfig) ([Location_RequestConfig](#location_requestconfig) \*requestConfig) | 销毁位置请求参数实例并回收内存。 | 64| void [OH_LocationRequestConfig_SetUseScene](#oh_locationrequestconfig_setusescene) ([Location_RequestConfig](#location_requestconfig) \*requestConfig, [Location_UseScene](#location_usescene) useScene) | 设置位置请求参数中的用户活动场景。<br/>位置请求参数[Location_RequestConfig](#location_requestconfig)中以useScene优先。<br/>如果设置了useScene,则powerConsumptionScene参数无效。<br/>如果未设置useScene,设置了powerConsumptionScene则该参数生效。<br/>如果两个参数都未设置,则默认useScene为LOCATION_USE_SCENE_DAILY_LIFE_SERVICE,<br/>powerConsumptionScene参数无效。 | 65| void [OH_LocationRequestConfig_SetPowerConsumptionScene](#oh_locationrequestconfig_setpowerconsumptionscene) ([Location_RequestConfig](#location_requestconfig) \*requestConfig, [Location_PowerConsumptionScene](#location_powerconsumptionscene) powerConsumptionScene) | 设置位置请求参数中的功耗场景。 | 66| void [OH_LocationRequestConfig_SetInterval](#oh_locationrequestconfig_setinterval) ([Location_RequestConfig](#location_requestconfig) \*requestConfig, int interval) | 设置位置请求参数中的位置上报间隔。 | 67| void [OH_LocationRequestConfig_SetCallback](#oh_locationrequestconfig_setcallback) ([Location_RequestConfig](#location_requestconfig) \*requestConfig, [Location_InfoCallback](#location_infocallback) callback, void \*userData) | 设置回调函数。 | 68 69 70## 类型定义说明 71 72 73### Location_BasicInfo 74 75``` 76typedef struct Location_BasicInfo Location_BasicInfo 77``` 78**描述** 79定义位置基本信息的结构体。 80 81**起始版本:** 13 82 83 84### Location_Info 85 86``` 87typedef struct Location_Info Location_Info 88``` 89**描述** 90定义位置信息的结构体。 91 92**起始版本:** 13 93 94 95### Location_InfoCallback 96 97``` 98typedef void(* Location_InfoCallback) (Location_Info *location, void *userData) 99``` 100**描述** 101用于接收位置上报的回调函数。 102 103**起始版本:** 13 104 105**参数:** 106 107| 名称 | 描述 | 108| -------- | -------- | 109| location | - 指向[Location_Info](#location_info)实例的指针,携带最新的位置信息。<br/>location实例的内存会在[Location_InfoCallback](#location_infocallback)结束时回收,<br/>请在此之前调用[OH_LocationInfo_GetBasicInfo](#oh_locationinfo_getbasicinfo)等接口获取位置信息。 | 110| userData | - 指向调用者数据结构或对象的指针,该参数是通过[OH_LocationRequestConfig_SetCallback](#oh_locationrequestconfig_setcallback)传入的。 | 111 112 113### Location_PowerConsumptionScene 114 115``` 116typedef enum Location_PowerConsumptionScene Location_PowerConsumptionScene 117``` 118**描述** 119定义位置请求中的功耗场景类型。 120 121**起始版本:** 13 122 123 124### Location_RequestConfig 125 126``` 127typedef struct Location_RequestConfig Location_RequestConfig 128``` 129**描述** 130定义位置请求参数的结构体。 131 132**起始版本:** 13 133 134 135### Location_ResultCode 136 137``` 138typedef enum Location_ResultCode Location_ResultCode 139``` 140**描述** 141定义位置服务的错误码。 142 143**起始版本:** 13 144 145 146### Location_SourceType 147 148``` 149typedef enum Location_SourceType Location_SourceType 150``` 151**描述** 152定义位置信息的来源。 153 154**起始版本:** 13 155 156 157### Location_UseScene 158 159``` 160typedef enum Location_UseScene Location_UseScene 161``` 162**描述** 163定义位置请求中的用户活动场景类型。 164 165**起始版本:** 13 166 167 168## 枚举类型说明 169 170 171### Location_PowerConsumptionScene 172 173``` 174enum Location_PowerConsumptionScene 175``` 176**描述** 177定义位置请求中的功耗场景类型。 178 179**起始版本:** 13 180 181| 枚举值 | 描述 | 182| -------- | -------- | 183| LOCATION_HIGH_POWER_CONSUMPTION | 高功耗。<br/>以GNSS定位技术为主。在GNSS提供稳定位置结果之前会使用网络定位技术提供服务;<br/>在持续定位时,如果超过30秒无法获取GNSS定位结果则会使用网络定位技术获取位置。<br/>对设备的硬件资源消耗较大,功耗较大。 | 184| LOCATION_LOW_POWER_CONSUMPTION | 低功耗。<br/>适用于对用户位置精度要求不高的使用场景,如新闻资讯、网购、点餐类应用。<br/>该场景仅使用网络定位技术提供定位服务,功耗较低。 | 185| LOCATION_NO_POWER_CONSUMPTION | 无功耗。<br/>这种场景下不会主动触发定位,会在其他应用定位时,才给当前应用返回位置。 | 186 187 188### Location_ResultCode 189 190``` 191enum Location_ResultCode 192``` 193**描述** 194定义位置服务的错误码。 195 196**起始版本:** 13 197 198| 枚举值 | 描述 | 199| -------- | -------- | 200| LOCATION_SUCCESS | 操作成功。 | 201| LOCATION_PERMISSION_DENIED | 权限校验失败。 | 202| LOCATION_INVALID_PARAM | 参数错误。<br/>可能原因:1.输入参数为空指针;2.参数数值超出定义范围。 | 203| LOCATION_NOT_SUPPORTED | 该功能不支持。由于设备能力有限,无法调用该函数。 | 204| LOCATION_SERVICE_UNAVAILABLE | 位置服务不可用。 | 205| LOCATION_SWITCH_OFF | 位置开关处于关闭状态。 | 206 207 208### Location_SourceType 209 210``` 211enum Location_SourceType 212``` 213**描述** 214定义位置信息的来源。 215 216**起始版本:** 13 217 218| 枚举值 | 描述 | 219| -------- | -------- | 220| LOCATION_SOURCE_TYPE_GNSS | 表示定位结果来自于GNSS定位技术。 | 221| LOCATION_SOURCE_TYPE_NETWORK | 表示定位结果来自于网络定位技术。 | 222| LOCATION_SOURCE_TYPE_INDOOR | 表示定位结果来自于室内高精度定位技术。 | 223| LOCATION_SOURCE_TYPE_RTK | 表示定位结果来自于室外高精度定位技术。 | 224 225 226### Location_UseScene 227 228``` 229enum Location_UseScene 230``` 231**描述** 232定义位置请求中的用户活动场景类型。 233 234**起始版本:** 13 235 236| 枚举值 | 描述 | 237| -------- | -------- | 238| LOCATION_USE_SCENE_NAVIGATION | 导航场景。<br/>适用于在户外获取设备实时位置的场景,如车载、步行导航。<br/>主要使用GNSS定位技术提供定位服务,功耗较高。 | 239| LOCATION_USE_SCENE_SPORT | 表示运动场景。<br/>适用于记录用户位置轨迹的场景,如运动类应用记录轨迹功能。<br/>主要使用GNSS定位技术提供定位服务,功耗较高。 | 240| LOCATION_USE_SCENE_TRANSPORT | 表示出行场景。<br/>适用于用户出行场景,如打车、乘坐公共交通等场景。<br/>主要使用GNSS定位技术提供定位服务,功耗较高。 | 241| LOCATION_USE_SCENE_DAILY_LIFE_SERVICE | 表示日常服务使用场景。<br/>适用于不需要定位用户精确位置的使用场景,如新闻资讯、网购、点餐类应用。<br/>该场景仅使用网络定位技术提供定位服务,功耗较低。 | 242 243 244## 函数说明 245 246 247### OH_Location_CreateRequestConfig() 248 249``` 250Location_RequestConfig* OH_Location_CreateRequestConfig (void ) 251``` 252**描述** 253创建一个位置请求参数结构体实例。 254 255**起始版本:** 13 256 257**返回:** 258 259返回指向[Location_RequestConfig](#location_requestconfig)实例的指针。 260 261如果返回NULL表示创建失败,可能的原因是应用地址空间满,导致空间分配不出来。 262 263 264### OH_Location_DestroyRequestConfig() 265 266``` 267void OH_Location_DestroyRequestConfig (Location_RequestConfig * requestConfig) 268``` 269**描述** 270销毁位置请求参数实例并回收内存。 271 272**起始版本:** 13 273 274**参数:** 275 276| 名称 | 描述 | 277| -------- | -------- | 278| requestConfig | - 指向[Location_RequestConfig](#location_requestconfig)实例的指针。<br/>该实例是由[OH_Location_CreateRequestConfig](#oh_location_createrequestconfig)创建的。 | 279 280 281### OH_Location_IsLocatingEnabled() 282 283``` 284Location_ResultCode OH_Location_IsLocatingEnabled (bool * enabled) 285``` 286**描述** 287查询位置开关是否开启。 288 289**起始版本:** 13 290 291**参数:** 292 293| 名称 | 描述 | 294| -------- | -------- | 295| enabled | - bool类型的指针,用于接收位置开关状态值。<br/>等于true表示位置开关开启,false表示位置开关关闭。<br/>需要传入非空指针,否则会返回错误。 | 296 297**返回:** 298 299返回操作结果,详细定义参见[Location_ResultCode](#location_resultcode)。 300 301**LOCAION_SUCCESS** 查询位置开关状态成功。 302 303LOCATION_INVALID_PARAM 入参是空指针。 304 305LOCATION_SERVICE_UNAVAILABLE 位置服务运行异常导致查询位置开关状态失败。 306 307 308### OH_Location_StartLocating() 309 310``` 311Location_ResultCode OH_Location_StartLocating (const Location_RequestConfig * requestConfig) 312``` 313**描述** 314启动定位并订阅位置变化。 315 316**起始版本:** 13 317 318**参数:** 319 320| 名称 | 描述 | 321| -------- | -------- | 322| requestConfig | - 指向定位请求参数的指针,该参数用于指定发起定位的场景信息和位置上报间隔。<br/>详细定义请参考[Location_RequestConfig](#location_requestconfig),可以使用[OH_Location_CreateRequestConfig](#oh_location_createrequestconfig)创建。 | 323 324**返回:** 325 326返回操作结果,详细定义参见[Location_ResultCode](#location_resultcode)。 327 328LOCAION_SUCCESS 启动定位成功。 329 330LOCATION_INVALID_PARAM 入参requestConfig为空指针。 331 332LOCATION_PERMISSION_DENIED 权限校验失败。 333 334LOCATION_NOT_SUPPORTED 当前设备不支持该功能。 335 336LOCATION_SERVICE_UNAVAILABLE 位置服务运行异常。 337 338LOCATION_SWITCH_OFF 位置开关未打开导致无法启动定位。 339 340**Permission:** 341 342ohos.permission.APPROXIMATELY_LOCATION 343 344 345### OH_Location_StopLocating() 346 347``` 348Location_ResultCode OH_Location_StopLocating (const Location_RequestConfig * requestConfig) 349``` 350**描述** 351停止定位并取消订阅位置变化。 352 353**起始版本:** 13 354 355**参数:** 356 357| 名称 | 描述 | 358| -------- | -------- | 359| requestConfig | - 指向定位请求参数的指针。<br/>该参数需要与[OH_Location_StartLocating](#oh_location_startlocating)中的requestConfig是同一个指针。<br/>详细定义请参考[Location_RequestConfig](#location_requestconfig)。<br/>需要传入非空指针,否则会返回错误。 | 360 361**返回:** 362 363返回操作结果,详细定义参见[Location_ResultCode](#location_resultcode)。 364 365LOCAION_SUCCESS 停止定位成功。 366 367LOCATION_INVALID_PARAM 入参为空指针或入参与[OH_Location_StartLocating](#oh_location_startlocating)的requestConfig指针不同。 368 369LOCATION_PERMISSION_DENIED 权限校验失败。 370 371LOCATION_NOT_SUPPORTED 当前设备不支持该功能。 372 373LOCATION_SERVICE_UNAVAILABLE 位置服务运行异常。 374 375LOCATION_SWITCH_OFF 位置开关未打开。 376 377**Permission:** 378 379ohos.permission.APPROXIMATELY_LOCATION 380 381 382### OH_LocationInfo_GetAdditionalInfo() 383 384``` 385Location_ResultCode OH_LocationInfo_GetAdditionalInfo (Location_Info * location, char * additionalInfo, uint32_t length ) 386``` 387**描述** 388获取位置信息中的附加信息。 389 390**起始版本:** 13 391 392**参数:** 393 394| 名称 | 描述 | 395| -------- | -------- | 396| location | - 指向位置信息结构体的指针。<br/>需要传入非空指针,该指针可以在[Location_InfoCallback](#location_infocallback)中获取。 | 397| additionalInfo | - char类型的非空指针;该变量用于保存附加信息字符串,该字符串是JSON格式。<br/>该指针和对应的内存由调用者创建,建议申请大于等于256字节的内存。<br/>如果传入空指针,会返回错误码。 | 398| length | - 表示additionalInfo的内存大小。 | 399 400**返回:** 401 402返回操作结果,详细定义参见[Location_ResultCode](#location_resultcode)。 403 404**LOCAION_SUCCESS** 获取附加信息成功。 405 406LOCATION_INVALID_PARAM 1. 入参location或additionalInfo是空指针。 407 4081. 入参length太小,也就是additionalInfo指向的内存太小导致无法保存完整的附加信息字符串。 409 410 411### OH_LocationInfo_GetBasicInfo() 412 413``` 414Location_BasicInfo OH_LocationInfo_GetBasicInfo (Location_Info * location) 415``` 416**描述** 417获取位置基本信息。 418 419**起始版本:** 13 420 421**参数:** 422 423| 名称 | 描述 | 424| -------- | -------- | 425| location | - 指向位置信息结构体的指针。<br/>需要传入非空指针,该指针可以在[Location_InfoCallback](#location_infocallback)中获取。 | 426 427**返回:** 428 429返回位置基本信息结构体。详细定义请参考[Location_BasicInfo](_location___basic_info.md)。 430 431 432### OH_LocationRequestConfig_SetCallback() 433 434``` 435void OH_LocationRequestConfig_SetCallback (Location_RequestConfig * requestConfig, Location_InfoCallback callback, void * userData ) 436``` 437**描述** 438设置回调函数。 439 440**起始版本:** 13 441 442**参数:** 443 444| 名称 | 描述 | 445| -------- | -------- | 446| requestConfig | - 指向[Location_RequestConfig](#location_requestconfig)实例的指针。<br/>该实例是由[OH_Location_CreateRequestConfig](#oh_location_createrequestconfig)创建的。 | 447| callback | - 指向回调函数的指针,该回调函数用于接收位置信息变化。<br/>详细定义请参考[Location_InfoCallback](#location_infocallback)。 | 448| userData | - 指向调用者数据结构或对象的指针。这个指针会在回调函数执行时作为入参回传给调用者。 | 449 450 451### OH_LocationRequestConfig_SetInterval() 452 453``` 454void OH_LocationRequestConfig_SetInterval (Location_RequestConfig * requestConfig, int interval ) 455``` 456**描述** 457设置位置请求参数中的位置上报间隔。 458 459**起始版本:** 13 460 461**参数:** 462 463| 名称 | 描述 | 464| -------- | -------- | 465| requestConfig | - 指向[Location_RequestConfig](#location_requestconfig)实例的指针。<br/>该实例是由[OH_Location_CreateRequestConfig](#oh_location_createrequestconfig)创建的。 | 466| interval | - 表示位置上报时间间隔,单位是“秒”。取值范围为大于等于1,默认值为1。 | 467 468 469### OH_LocationRequestConfig_SetPowerConsumptionScene() 470 471``` 472void OH_LocationRequestConfig_SetPowerConsumptionScene (Location_RequestConfig * requestConfig, Location_PowerConsumptionScene powerConsumptionScene ) 473``` 474**描述** 475设置位置请求参数中的功耗场景。 476 477**起始版本:** 13 478 479**参数:** 480 481| 名称 | 描述 | 482| -------- | -------- | 483| requestConfig | - 指向[Location_RequestConfig](#location_requestconfig)实例的指针。<br/>该实例是由[OH_Location_CreateRequestConfig](#oh_location_createrequestconfig)创建的。 | 484| powerConsumptionScene | - 表示位置请求的功耗场景。<br/>默认值是LOCATION_LOW_POWER_CONSUMPTION。<br/>详细定义见[Location_PowerConsumptionScene](#location_powerconsumptionscene)。 | 485 486 487### OH_LocationRequestConfig_SetUseScene() 488 489``` 490void OH_LocationRequestConfig_SetUseScene (Location_RequestConfig * requestConfig, Location_UseScene useScene ) 491``` 492**描述** 493设置位置请求参数中的用户活动场景。 494 495位置请求参数[Location_RequestConfig](#location_requestconfig)中以useScene优先。 496 497如果设置了useScene,则powerConsumptionScene参数无效。 498 499如果未设置useScene,设置了powerConsumptionScene则该参数生效。 500 501如果两个参数都未设置,则默认useScene为LOCATION_USE_SCENE_DAILY_LIFE_SERVICE, 502 503powerConsumptionScene参数无效。 504 505**起始版本:** 13 506 507**参数:** 508 509| 名称 | 描述 | 510| -------- | -------- | 511| requestConfig | - 指向[Location_RequestConfig](#location_requestconfig)实例的指针。<br/>该实例是由[OH_Location_CreateRequestConfig](#oh_location_createrequestconfig)创建的。 | 512| useScene | - 表示位置请求时的用户活动场景。<br/>默认值是LOCATION_USE_SCENE_DAILY_LIFE_SERVICE。<br/>详细定义见[Location_UseScene](#location_usescene)。 | 513