1# @ohos.geoLocationManager (位置服务)(系统接口) 2 3位置服务提供GNSS定位、网络定位、地理编码、逆地理编码、国家码和地理围栏等基本功能。 4 5> **说明:** 6> 7> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8> 当前页面仅包含本模块的系统接口,其他公开接口参见[@ohos.geoLocationManager (位置服务)](js-apis-geoLocationManager.md)。 9> 本模块能力仅支持WGS-84坐标系。 10 11## 申请权限 12 13应用在使用系统能力前,需要检查是否已经获取用户授权访问设备位置信息。如未获得授权,可以向用户申请需要的位置权限,申请方式请参考下文。 14 15系统提供的定位权限有: 16- ohos.permission.LOCATION 17 18- ohos.permission.APPROXIMATELY_LOCATION 19 20- ohos.permission.LOCATION_IN_BACKGROUND 21 22访问设备的位置信息,必须申请权限,并且获得用户授权。 23 24API9之前的版本,申请ohos.permission.LOCATION即可。 25 26API9及之后的版本,需要申请ohos.permission.APPROXIMATELY_LOCATION或者同时申请ohos.permission.APPROXIMATELY_LOCATION和ohos.permission.LOCATION;无法单独申请ohos.permission.LOCATION。 27 28| 使用的API版本 | 申请位置权限 | 申请结果 | 位置的精确度 | 29| -------- | -------- | -------- | -------- | 30| 小于9 | ohos.permission.LOCATION | 成功 | 获取到精准位置,精准度在米级别。 | 31| 大于等于9 | ohos.permission.LOCATION | 失败 | 无法获取位置。 | 32| 大于等于9 | ohos.permission.APPROXIMATELY_LOCATION | 成功 | 获取到模糊位置,精确度为5公里。 | 33| 大于等于9 | ohos.permission.APPROXIMATELY_LOCATION和ohos.permission.LOCATION | 成功 | 获取到精准位置,精准度在米级别。 | 34 35如果应用在后台运行时也需要访问设备位置,需要申请ohos.permission.LOCATION_IN_BACKGROUND权限或申请LOCATION类型的长时任务,这样应用在切入后台之后,系统可以继续上报位置信息。 36 37应用如需使用ohos.permission.LOCATION_IN_BACKGROUND权限,需要在设置界面由用户手动授予,具体授权方式可参考[ohos.permission.LOCATION_IN_BACKGROUND权限说明](../../security/AccessToken/permissions-for-all.md#ohospermissionlocation_in_background)。 38 39长时任务申请可参考[长时任务](../../task-management/continuous-task.md)。 40 41开发者可以在应用配置文件中声明所需要的权限,具体可参考[向用户申请授权](../../security/AccessToken/request-user-authorization.md)。 42 43 44## 导入模块 45 46```ts 47import { geoLocationManager } from '@kit.LocationKit'; 48``` 49 50## GeoAddress 51 52地理编码地址信息。 53 54**系统能力**:SystemCapability.Location.Location.Geocoder 55 56| 名称 | 类型 | 只读 | 可选 | 说明 | 57| -------- | -------- | -------- | -------- | -------- | 58| isFromMock | Boolean | 否 | 是 | true:地名信息来自于逆地理编码模拟功能<br/>false:地名信息不是来自于逆地理编码模拟功能<br/>**系统API**:此接口为系统接口。 | 59 60 61## Location 62 63位置信息。 64 65**系统能力**:SystemCapability.Location.Location.Core 66 67| 名称 | 类型 | 只读 | 可选 | 说明 | 68| -------- | -------- | -------- | -------- | -------- | 69| isFromMock | Boolean | 否 | 是 | true:位置信息来自于位置模拟功能<br/>false:位置信息不是来自于位置模拟功能<br/>**系统API**:此接口为系统接口。 | 70 71 72## ReverseGeocodingMockInfo 73 74逆地理编码模拟功能的配置信息,包含一个位置信息和一个地名信息。 75 76**系统能力**:SystemCapability.Location.Location.Core 77 78**系统API**:此接口为系统接口。 79 80| 名称 | 类型 | 只读 | 可选 | 说明 | 81| -------- | -------- | -------- | -------- | -------- | 82| location | [ReverseGeoCodeRequest](js-apis-geoLocationManager.md#reversegeocoderequest) | 否 | 否 | 表示经纬度信息。 | 83| geoAddress | [GeoAddress](#geoaddress) | 否 | 否 |表示地名信息。 | 84 85 86## LocationMockConfig 87 88位置模拟功能的配置参数,包含了模拟位置上报的时间间隔和模拟位置数组。 89 90**系统能力**:SystemCapability.Location.Location.Core 91 92**系统API**:此接口为系统接口。 93 94| 名称 | 类型 | 只读 | 可选 | 说明 | 95| -------- | -------- | -------- | -------- | -------- | 96| timeInterval | number | 否 | 否 | 表示模拟位置上报的时间间隔,单位是秒。 | 97| locations | Array<[Location](#location)> | 否 | 否 | 表示模拟位置数组。 | 98 99## LocatingRequiredDataConfig<sup>10+</sup> 100 101获取定位所需数据时的配置参数。 102 103**系统能力**:SystemCapability.Location.Location.Core 104 105**系统API**:此接口为系统接口。 106 107| 名称 | 类型 | 只读 | 可选 | 说明 | 108| -------- | -------- | -------- | -------- | -------- | 109| type | [LocatingRequiredDataType](#locatingrequireddatatype10) | 否 | 否 | 表示请求获取数据的类型。 | 110| needStartScan | boolean | 否 | 否 | true:需要发起扫描<br/>false:不需要发起扫描 | 111| scanInterval | number | 否 | 是 | 表示扫描的时间间隔。单位是毫秒,默认值是10000毫秒,取值范围为大于0。 | 112| scanTimeout | number | 否 | 是 | 表示单次扫描的超时时间。单位是毫秒,默认值是10000毫秒,取值范围为大于0小于600000。 | 113 114 115## LocatingRequiredData<sup>10+</sup> 116 117表示定位业务所需的数据,包含WiFi或蓝牙扫描结果,APP拿到这些数据之后可以用于网络定位等业务。 118 119**系统能力**:SystemCapability.Location.Location.Core 120 121**系统API**:此接口为系统接口。 122 123| 名称 | 类型 | 只读 | 可选 | 说明 | 124| -------- | -------- | -------- | -------- | -------- | 125| wifiData | [WifiScanInfo](#wifiscaninfo10) | 否 | 是 | 表示WiFi扫描结果。 | 126| bluetoothData | [BluetoothScanInfo](#bluetoothscaninfo10) | 否 | 是 | 表示蓝牙扫描结果。 | 127 128 129## WifiScanInfo<sup>10+</sup> 130 131WiFi扫描信息,包含扫描到的WiFi热点的ssid、bssid和rssi等信息。 132 133**系统能力**:SystemCapability.Location.Location.Core 134 135**系统API**:此接口为系统接口。 136 137| 名称 | 类型 | 只读 | 可选 | 说明 | 138| -------- | -------- | -------- | -------- | -------- | 139| ssid | string | 否 | 否 | WiFi热点的SSID,编码格式为UTF-8。 | 140| bssid | string | 否 | 否 | WiFi热点的BSSID。 | 141| rssi | number | 否 | 否 | WiFi热点的信号强度(dBm)。 | 142| frequency | number | 否 | 否 | WiFi热点的频率。 | 143| timestamp | number | 否 | 否 | 时间戳。 | 144 145 146## BluetoothScanInfo<sup>10+</sup> 147 148蓝牙扫描信息。 149 150**系统能力**:SystemCapability.Location.Location.Core 151 152**系统API**:此接口为系统接口。 153 154| 名称 | 类型 | 只读 | 可选 | 说明 | 155| -------- | -------- | -------- | -------- | -------- | 156| deviceName | string | 否 | 否 | 蓝牙设备名称。 | 157| macAddress | string | 否 | 否 | 蓝牙设备的MAC地址。 | 158| rssi | number | 否 | 否 | 蓝牙设备的信号强度(dBm)。 | 159| timestamp | number | 否 | 否 | 时间戳。 | 160 161## LocationPrivacyType 162 163定位服务隐私协议类型。 164 165**系统能力**:SystemCapability.Location.Location.Core 166 167**系统API**:此接口为系统接口。 168 169| 名称 | 值 | 说明 | 170| -------- | -------- | -------- | 171| OTHERS | 0 | 其他场景。预留字段。 | 172| STARTUP | 1 | 开机向导场景下的隐私协议。在开机时弹出协议,提醒用户阅读并选择是否授权。 | 173| CORE_LOCATION | 2 | 开启网络定位时弹出的隐私协议。 | 174 175## LocatingRequiredDataType<sup>10+</sup> 176 177定位业务所需数据的类型。 178 179**系统能力**:SystemCapability.Location.Location.Core 180 181**系统API**:此接口为系统接口。 182 183| 名称 | 值 | 说明 | 184| -------- | -------- | -------- | 185| WIFI | 1 | 表示WiFi扫描信息。 | 186| BLUETOOTH | 2 | 表示蓝牙扫描信息。 | 187 188 189## LocationIconStatus<sup>12+</sup> 190 191定位图标状态。 192 193**系统能力**:SystemCapability.Location.Location.Core 194 195**系统API**:此接口为系统接口。 196 197| 名称 | 值 | 说明 | 198| -------- | -------- | -------- | 199| LOCATING_NOT_STARTED | 0 | 表示当前无定位业务,无需显示定位图标。 | 200| LOCATING_STARTED | 1 | 表示当前在进行普通定位业务,需要显示普通定位图标。 | 201| HD_LOCATING_STARTED | 2 | 表示当前正在进行高精度定位业务,需要显示高精度定位图标。 | 202 203 204## geoLocationManager.on('locatingRequiredDataChange')<sup>10+</sup> 205 206on(type: 'locatingRequiredDataChange', config: LocatingRequiredDataConfig, callback: Callback<Array<LocatingRequiredData>>): void; 207 208订阅定位业务所需数据的变化,主要包含WiFi和蓝牙扫描信息;根据入参决定是否启动WiFi和蓝牙扫描。使用callback异步回调。 209 210**需要权限**:ohos.permission.LOCATION 和 ohos.permission.APPROXIMATELY_LOCATION 211 212**系统能力**:SystemCapability.Location.Location.Core 213 214**系统API**:此接口为系统接口。 215 216**参数**: 217 218 | 参数名 | 类型 | 必填 | 说明 | 219 | -------- | -------- | -------- | -------- | 220 | type | string | 是 | 设置事件类型。type为“locatingRequiredDataChange”,表示订阅定位业务所需数据的变化。 | 221 | config | [LocatingRequiredDataConfig](#locatingrequireddataconfig10) | 是 | 表示获取定位所需数据时的配置参数。 | 222 | callback | Callback<Array<[LocatingRequiredData](#locatingrequireddata10)>> | 是 | 回调函数,返回定位业务所需数据。 | 223 224**错误码**: 225 226以下错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 227 228| 错误码ID | 错误信息 | 229| -------- | ---------------------------------------- | 230|201 | Permission verification failed. The application does not have the permission required to call the API. | 231|202 | Permission verification failed. A non-system application calls a system API. | 232|401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 233|801 | Capability not supported. Failed to call ${geoLocationManager.on('locatingRequiredDataChange')} due to limited device capabilities. | 234|3301800 | Failed to start WiFi or Bluetooth scanning. | 235 236**示例** 237 238 ```ts 239 import { geoLocationManager } from '@kit.LocationKit'; 240 import { BusinessError } from '@kit.BasicServicesKit' 241 let callback = (code:Array<geoLocationManager.LocatingRequiredData>):void => { 242 console.log('locatingRequiredDataChange: ' + JSON.stringify(code)); 243 } 244 let config:geoLocationManager.LocatingRequiredDataConfig = {'type': 1, 'needStartScan': true, 'scanInterval': 10000}; 245 try { 246 geoLocationManager.on('locatingRequiredDataChange', config, callback); 247 } catch (err) { 248 console.error("errCode:" + JSON.stringify(err)); 249 } 250 ``` 251 252 253## geoLocationManager.off('locatingRequiredDataChange')<sup>10+</sup> 254 255off(type: 'locatingRequiredDataChange', callback?: Callback<Array<LocatingRequiredData>>): void; 256 257取消订阅定位业务所需数据的变化,并停止WiFi和蓝牙扫描。 258 259**需要权限**:ohos.permission.LOCATION 和 ohos.permission.APPROXIMATELY_LOCATION 260 261**系统能力**:SystemCapability.Location.Location.Core 262 263**系统API**:此接口为系统接口。 264 265**参数**: 266 267 | 参数名 | 类型 | 必填 | 说明 | 268 | -------- | -------- | -------- | -------- | 269 | type | string | 是 | 设置事件类型。type为“locatingRequiredDataChange”,表示取消订阅定位业务所需数据的变化。 | 270 | callback | Callback<Array<[LocatingRequiredData](#locatingrequireddata10)>> | 否 | 需要取消订阅的回调函数。该回调函数需要与on接口传入的回调函数保持一致。若无此参数,则取消当前类型的所有订阅。 | 271 272**错误码**: 273 274错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 275 276| 错误码ID | 错误信息 | 277| -------- | ---------------------------------------- | 278|201 | Permission verification failed. The application does not have the permission required to call the API. | 279|202 | Permission verification failed. A non-system application calls a system API. | 280|401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 281|801 | Capability not supported. Failed to call ${geoLocationManager.off('locatingRequiredDataChange')} due to limited device capabilities. | 282 283**示例** 284 285 ```ts 286 import { geoLocationManager } from '@kit.LocationKit'; 287 import { BusinessError } from '@kit.BasicServicesKit' 288 let callback = (code:Array<geoLocationManager.LocatingRequiredData>):void => { 289 console.log('locatingRequiredDataChange: ' + JSON.stringify(code)); 290 } 291 let config:geoLocationManager.LocatingRequiredDataConfig = {'type': 1, 'needStartScan': true, 'scanInterval': 10000}; 292 try { 293 geoLocationManager.on('locatingRequiredDataChange', config, callback); 294 geoLocationManager.off('locatingRequiredDataChange', callback); 295 } catch (err) { 296 console.error("errCode:" + JSON.stringify(err)); 297 } 298 ``` 299 300## geoLocationManager.enableLocation 301 302enableLocation(callback: AsyncCallback<void>): void; 303 304打开位置服务,使用callback异步回调。 305 306**系统API**:此接口为系统接口。 307 308**需要权限**:ohos.permission.MANAGE_SECURE_SETTINGS 309 310**系统能力**:SystemCapability.Location.Location.Core 311 312**参数**: 313 314 | 参数名 | 类型 | 必填 | 说明 | 315 | -------- | -------- | -------- | -------- | 316 | callback | AsyncCallback<void> | 是 | 回调函数,当打开位置服务成功,err为undefined,否则为错误对象。 | 317 318**错误码**: 319 320以下错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 321 322| 错误码ID | 错误信息 | 323| -------- | ---------------------------------------- | 324|201 | Permission verification failed. The application does not have the permission required to call the API. | 325|202 | Permission verification failed. A non-system application calls a system API. | 326|401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 327|801 | Capability not supported. Failed to call ${geoLocationManager.enableLocation} due to limited device capabilities. | 328|3301000 | The location service is unavailable. | 329 330**示例** 331 332 ```ts 333 import { geoLocationManager } from '@kit.LocationKit'; 334 import { BusinessError } from '@kit.BasicServicesKit' 335 try { 336 geoLocationManager.enableLocation((err) => { 337 if (err) { 338 console.error('enableLocation: err=' + JSON.stringify(err)); 339 } 340 }); 341 } catch (err) { 342 console.error("errCode:" + JSON.stringify(err)); 343 } 344 ``` 345 346 347## geoLocationManager.enableLocation 348 349enableLocation(): Promise<void> 350 351打开位置服务,使用Promise异步回调。 352 353**系统API**:此接口为系统接口。 354 355**需要权限**:ohos.permission.MANAGE_SECURE_SETTINGS 356 357**系统能力**:SystemCapability.Location.Location.Core 358 359**返回值**: 360 361 | 类型 | 说明 | 362 | -------- | -------- | 363 | Promise<void> | Promise对象。无返回结果的Promise对象 | 364 365**错误码**: 366 367以下错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 368 369| 错误码ID | 错误信息 | 370| -------- | ---------------------------------------- | 371|201 | Permission verification failed. The application does not have the permission required to call the API. | 372|202 | Permission verification failed. A non-system application calls a system API. | 373|801 | Capability not supported. Failed to call ${geoLocationManager.enableLocation} due to limited device capabilities. | 374|3301000 | The location service is unavailable. | 375 376**示例** 377 378 ```ts 379 import { geoLocationManager } from '@kit.LocationKit'; 380 import { BusinessError } from '@kit.BasicServicesKit' 381 try { 382 geoLocationManager.enableLocation().then(() => { 383 console.log('promise, enableLocation succeed'); 384 }) 385 .catch((error:BusinessError.BusinessError) => { 386 console.error('promise, enableLocation: error=' + JSON.stringify(error)); 387 }); 388 } catch (err) { 389 console.error("errCode:" + JSON.stringify(err)); 390 } 391 ``` 392 393## geoLocationManager.disableLocation 394 395disableLocation(): void; 396 397关闭位置服务。 398 399**系统API**:此接口为系统接口。 400 401**需要权限**:ohos.permission.MANAGE_SECURE_SETTINGS 402 403**系统能力**:SystemCapability.Location.Location.Core 404 405**错误码**: 406 407以下错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 408 409| 错误码ID | 错误信息 | 410| -------- | ---------------------------------------- | 411|201 | Permission verification failed. The application does not have the permission required to call the API. | 412|202 | Permission verification failed. A non-system application calls a system API. | 413|801 | Capability not supported. Failed to call ${geoLocationManager.disableLocation} due to limited device capabilities. | 414|3301000 | The location service is unavailable. | 415 416**示例** 417 418 ```ts 419 import { geoLocationManager } from '@kit.LocationKit'; 420 try { 421 geoLocationManager.disableLocation(); 422 } catch (err) { 423 console.error("errCode:" + JSON.stringify(err)); 424 } 425 ``` 426 427## geoLocationManager.enableLocationMock 428 429enableLocationMock(): void; 430 431使能位置模拟功能。 432 433**系统能力**:SystemCapability.Location.Location.Core 434 435**系统API**:此接口为系统接口。 436 437**错误码**: 438 439以下错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 440 441| 错误码ID | 错误信息 | 442| -------- | ---------------------------------------- | 443|202 | Permission verification failed. A non-system application calls a system API. | 444|801 | Capability not supported. Failed to call ${geoLocationManager.enableLocationMock} due to limited device capabilities. | 445|3301000 | The location service is unavailable. | 446|3301100 | The location switch is off.| 447 448**示例** 449 450 ```ts 451 import { geoLocationManager } from '@kit.LocationKit'; 452 try { 453 geoLocationManager.enableLocationMock(); 454 } catch (err) { 455 console.error("errCode:" + JSON.stringify(err)); 456 } 457 ``` 458 459 460## geoLocationManager.disableLocationMock 461 462disableLocationMock(): void; 463 464去使能位置模拟功能。 465 466**系统能力**:SystemCapability.Location.Location.Core 467 468**系统API**:此接口为系统接口。 469 470**错误码**: 471 472以下错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 473 474| 错误码ID | 错误信息 | 475| -------- | ---------------------------------------- | 476|202 | Permission verification failed. A non-system application calls a system API. | 477|801 | Capability not supported. Failed to call ${geoLocationManager.disableLocationMock} due to limited device capabilities. | 478|3301000 | The location service is unavailable. | 479|3301100 | The location switch is off.| 480 481**示例** 482 483 ```ts 484 import { geoLocationManager } from '@kit.LocationKit'; 485 try { 486 geoLocationManager.disableLocationMock(); 487 } catch (err) { 488 console.error("errCode:" + JSON.stringify(err)); 489 } 490 ``` 491 492 493## geoLocationManager.setMockedLocations 494 495setMockedLocations(config: LocationMockConfig): void; 496 497设置模拟的位置信息,后面会以该接口中携带的时间间隔上报模拟位置。 498 499该接口需要在调用[geoLocationManager.enableLocationMock](#geolocationmanagerenablelocationmock)之后才能调用。 500 501**系统能力**:SystemCapability.Location.Location.Core 502 503**系统API**:此接口为系统接口。 504 505**参数**: 506 507 | 参数名 | 类型 | 必填 | 说明 | 508 | -------- | -------- | -------- | -------- | 509 | config | [LocationMockConfig](#locationmockconfig) | 是 | 指示位置模拟的配置参数,包含模拟位置上报的时间间隔和模拟位置数组。 | 510 511**错误码**: 512 513以下错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 514 515| 错误码ID | 错误信息 | 516| -------- | ---------------------------------------- | 517|202 | Permission verification failed. A non-system application calls a system API. | 518|401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 519|801 | Capability not supported. Failed to call ${geoLocationManager.setMockedLocations} due to limited device capabilities. | 520|3301000 | The location service is unavailable. | 521|3301100 | The location switch is off.| 522 523**示例** 524 525 ```ts 526 import { geoLocationManager } from '@kit.LocationKit'; 527 let locations:Array<geoLocationManager.Location> = [ 528 {"latitude": 30.12, "longitude": 120.11, "altitude": 123, "accuracy": 1, "speed": 5.2, "timeStamp": 16594326109, "direction": 123.11, "timeSinceBoot": 1000000000, "additionSize": 0, "isFromMock": true}, 529 {"latitude": 31.13, "longitude": 121.11, "altitude": 123, "accuracy": 2, "speed": 5.2, "timeStamp": 16594326109, "direction": 123.11, "timeSinceBoot": 2000000000, "additionSize": 0, "isFromMock": true}, 530 {"latitude": 32.14, "longitude": 122.11, "altitude": 123, "accuracy": 3, "speed": 5.2, "timeStamp": 16594326109, "direction": 123.11, "timeSinceBoot": 3000000000, "additionSize": 0, "isFromMock": true}, 531 {"latitude": 33.15, "longitude": 123.11, "altitude": 123, "accuracy": 4, "speed": 5.2, "timeStamp": 16594326109, "direction": 123.11, "timeSinceBoot": 4000000000, "additionSize": 0, "isFromMock": true}, 532 {"latitude": 34.16, "longitude": 124.11, "altitude": 123, "accuracy": 5, "speed": 5.2, "timeStamp": 16594326109, "direction": 123.11, "timeSinceBoot": 5000000000, "additionSize": 0, "isFromMock": true} 533 ]; 534 let config:geoLocationManager.LocationMockConfig = {"timeInterval": 5, "locations": locations}; 535 try { 536 geoLocationManager.enableLocationMock(); 537 geoLocationManager.setMockedLocations(config); 538 } catch (err) { 539 console.error("errCode:" + JSON.stringify(err)); 540 } 541 ``` 542 543 544## geoLocationManager.enableReverseGeocodingMock 545 546enableReverseGeocodingMock(): void; 547 548使能逆地理编码模拟功能。 549 550**系统能力**:SystemCapability.Location.Location.Core 551 552**系统API**:此接口为系统接口。 553 554**错误码**: 555 556以下错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 557 558| 错误码ID | 错误信息 | 559| -------- | ---------------------------------------- | 560|202 | Permission verification failed. A non-system application calls a system API. | 561|801 | Capability not supported. Failed to call ${geoLocationManager.enableReverseGeocodingMock} due to limited device capabilities. | 562|3301000 | The location service is unavailable. | 563 564**示例** 565 566 ```ts 567 import { geoLocationManager } from '@kit.LocationKit'; 568 try { 569 geoLocationManager.enableReverseGeocodingMock(); 570 } catch (err) { 571 console.error("errCode:" + JSON.stringify(err)); 572 } 573 ``` 574 575 576## geoLocationManager.disableReverseGeocodingMock 577 578disableReverseGeocodingMock(): void; 579 580去使能逆地理编码模拟功能。 581 582**系统能力**:SystemCapability.Location.Location.Core 583 584**系统API**:此接口为系统接口。 585 586**错误码**: 587 588以下错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 589 590| 错误码ID | 错误信息 | 591| -------- | ---------------------------------------- | 592|202 | Permission verification failed. A non-system application calls a system API. | 593|801 | Capability not supported. Failed to call ${geoLocationManager.disableReverseGeocodingMock} due to limited device capabilities. | 594|3301000 | The location service is unavailable. | 595 596**示例** 597 598 ```ts 599 import { geoLocationManager } from '@kit.LocationKit'; 600 try { 601 geoLocationManager.disableReverseGeocodingMock(); 602 } catch (err) { 603 console.error("errCode:" + JSON.stringify(err)); 604 } 605 ``` 606 607 608## geoLocationManager.setReverseGeocodingMockInfo 609 610setReverseGeocodingMockInfo(mockInfos: Array<ReverseGeocodingMockInfo>): void; 611 612设置逆地理编码模拟功能的配置信息,包含了位置和地名的对应关系,后续进行逆地理编码查询时如果位置信息位于配置信息中,就返回对应的地名。 613 614该接口需要在调用[geoLocationManager.enableReverseGeocodingMock](#geolocationmanagerenablereversegeocodingmock)之后才能调用。 615 616**系统能力**:SystemCapability.Location.Location.Core 617 618**系统API**:此接口为系统接口。 619 620**参数**: 621 622 | 参数名 | 类型 | 必填 | 说明 | 623 | -------- | -------- | -------- | -------- | 624 | mockInfos | Array<[ReverseGeocodingMockInfo](#reversegeocodingmockinfo)> | 是 | 指示逆地理编码模拟功能的配置参数数组。逆地理编码模拟功能的配置参数包含了一个位置和一个地名。 | 625 626**错误码**: 627 628以下错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 629 630| 错误码ID | 错误信息 | 631| -------- | ---------------------------------------- | 632|202 | Permission verification failed. A non-system application calls a system API. | 633|401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 634|801 | Capability not supported. Failed to call ${geoLocationManager.setReverseGeocodingMockInfo} due to limited device capabilities. | 635|3301000 | The location service is unavailable. | 636 637**示例** 638 639 ```ts 640 import { geoLocationManager } from '@kit.LocationKit'; 641 let mockInfos:Array<geoLocationManager.ReverseGeocodingMockInfo> = [ 642 {"location": {"locale": "zh", "latitude": 30.12, "longitude": 120.11, "maxItems": 1}, "geoAddress": {"locale": "zh", "latitude": 30.12, "longitude": 120.11, "isFromMock": true}}, 643 {"location": {"locale": "zh", "latitude": 31.12, "longitude": 121.11, "maxItems": 1}, "geoAddress": {"locale": "zh", "latitude": 31.12, "longitude": 121.11, "isFromMock": true}}, 644 {"location": {"locale": "zh", "latitude": 32.12, "longitude": 122.11, "maxItems": 1}, "geoAddress": {"locale": "zh", "latitude": 32.12, "longitude": 122.11, "isFromMock": true}}, 645 {"location": {"locale": "zh", "latitude": 33.12, "longitude": 123.11, "maxItems": 1}, "geoAddress": {"locale": "zh", "latitude": 33.12, "longitude": 123.11, "isFromMock": true}}, 646 {"location": {"locale": "zh", "latitude": 34.12, "longitude": 124.11, "maxItems": 1}, "geoAddress": {"locale": "zh", "latitude": 34.12, "longitude": 124.11, "isFromMock": true}}, 647 ]; 648 try { 649 geoLocationManager.enableReverseGeocodingMock(); 650 geoLocationManager.setReverseGeocodingMockInfo(mockInfos); 651 } catch (err) { 652 console.error("errCode:" + JSON.stringify(err)); 653 } 654 ``` 655 656 657## geoLocationManager.isLocationPrivacyConfirmed 658 659isLocationPrivacyConfirmed(type: LocationPrivacyType): boolean; 660 661查询用户是否同意定位服务隐私申明,是否同意启用定位服务。只有系统应用才能调用。 662 663**系统API**:此接口为系统接口。 664 665**系统能力**:SystemCapability.Location.Location.Core 666 667**参数**: 668 669 | 参数名 | 类型 | 必填 | 说明 | 670 | -------- | -------- | -------- | -------- | 671 | type | [LocationPrivacyType](#locationprivacytype)| 是 | 指定隐私申明场景,例如开机向导中的隐私申明、开启网络定位功能时弹出的隐私申明等。 | 672 673**返回值**: 674 675 | 类型 | 说明 | 676 | -------- | -------- | 677 | boolean | true:用户同意定位服务隐私申明<br/>false:用户不同意定位服务隐私申明 | 678 679**错误码**: 680 681以下错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 682 683| 错误码ID | 错误信息 | 684| -------- | ---------------------------------------- | 685|202 | Permission verification failed. A non-system application calls a system API. | 686|401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 687|801 | Capability not supported. Failed to call ${geoLocationManager.isLocationPrivacyConfirmed} due to limited device capabilities. | 688|3301000 | The location service is unavailable. | 689 690**示例** 691 692 ```ts 693 import { geoLocationManager } from '@kit.LocationKit'; 694 try { 695 let isConfirmed = geoLocationManager.isLocationPrivacyConfirmed(1); 696 } catch (err) { 697 console.error("errCode:" + JSON.stringify(err)); 698 } 699 ``` 700 701 702## geoLocationManager.setLocationPrivacyConfirmStatus 703 704setLocationPrivacyConfirmStatus(type: LocationPrivacyType, isConfirmed: boolean): void; 705 706设置用户勾选定位服务隐私申明的状态,记录用户是否同意启用定位服务。只有系统应用才能调用。 707 708**系统API**:此接口为系统接口。 709 710**需要权限**:ohos.permission.MANAGE_SECURE_SETTINGS 711 712**系统能力**:SystemCapability.Location.Location.Core 713 714**参数**: 715 716 | 参数名 | 类型 | 必填 | 说明 | 717 | -------- | -------- | -------- | -------- | 718 | type | [LocationPrivacyType](#locationprivacytype) | 是 | 指定隐私申明场景,例如开机向导中的隐私申明、开启网络定位功能时弹出的隐私申明等。 | 719 | isConfirmed | boolean | 是 | true:用户同意定位服务隐私申明<br/>false:用户不同意定位服务隐私申明 | 720 721**错误码**: 722 723以下错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 724 725| 错误码ID | 错误信息 | 726| -------- | ---------------------------------------- | 727|201 | Permission verification failed. The application does not have the permission required to call the API. | 728|202 | Permission verification failed. A non-system application calls a system API. | 729|401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 730|801 | Capability not supported. Failed to call ${geoLocationManager.setLocationPrivacyConfirmStatus} due to limited device capabilities. | 731|3301000 | The location service is unavailable. | 732 733**示例** 734 735 ```ts 736 import { geoLocationManager } from '@kit.LocationKit'; 737 try { 738 geoLocationManager.setLocationPrivacyConfirmStatus(1, true); 739 } catch (err) { 740 console.error("errCode:" + JSON.stringify(err)); 741 } 742 ``` 743 744 745## geoLocationManager.getLocatingRequiredData<sup>10+</sup> 746 747getLocatingRequiredData(config: LocatingRequiredDataConfig): Promise<Array<LocatingRequiredData>>; 748 749单次获取定位业务所需数据,包含WiFi蓝牙扫描信息,使用Promise方式异步返回结果。 750 751**需要权限**:ohos.permission.LOCATION 和 ohos.permission.APPROXIMATELY_LOCATION 752 753**系统能力**:SystemCapability.Location.Location.Core 754 755**系统API**:此接口为系统接口。 756 757**参数**: 758 759 | 参数名 | 类型 | 必填 | 说明 | 760 | -------- | -------- | -------- | -------- | 761 | config | [LocatingRequiredDataConfig](#locatingrequireddataconfig10) | 是 | 表示获取定位所需数据时的配置参数。 | 762 763**返回值**: 764 765 | 类型 | 说明 | 766 | -------- | -------- | 767 | Promise<Array<[LocatingRequiredData](#locatingrequireddata10)>> | 以Promise形式返回定位业务所需数据,包含WiFi蓝牙扫描信息。 | 768 769**错误码**: 770 771以下错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 772 773| 错误码ID | 错误信息 | 774| -------- | ---------------------------------------- | 775|201 | Permission verification failed. The application does not have the permission required to call the API. | 776|202 | Permission verification failed. A non-system application calls a system API. | 777|401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 778|801 | Capability not supported. Failed to call ${geoLocationManager.getLocatingRequiredData} due to limited device capabilities. | 779|3301800 | Failed to start WiFi or Bluetooth scanning. | 780 781**示例** 782 783 ```ts 784 import { geoLocationManager } from '@kit.LocationKit'; 785 import { BusinessError } from '@kit.BasicServicesKit' 786 let config:geoLocationManager.LocatingRequiredDataConfig = {'type': 1, 'needStartScan': true, 'scanInterval': 10000}; 787 try { 788 geoLocationManager.getLocatingRequiredData(config).then((result) => { 789 console.log('getLocatingRequiredData return: ' + JSON.stringify(result)); 790 }) 791 .catch((error:BusinessError.BusinessError) => { 792 console.error('promise, getLocatingRequiredData: error=' + JSON.stringify(error)); 793 }); 794 } catch (err) { 795 console.error("errCode:" + JSON.stringify(err)); 796 } 797 ``` 798 799 800## geoLocationManager.on('locationIconStatusChange')<sup>12+</sup> 801 802on(type: 'locationIconStatusChange', callback: Callback<LocationIconStatus>): void; 803 804订阅定位图标状态变化。使用callback异步回调。 805 806**系统能力**:SystemCapability.Location.Location.Core 807 808**系统API**:此接口为系统接口。 809 810**参数**: 811 812 | 参数名 | 类型 | 必填 | 说明 | 813 | -------- | -------- | -------- | -------- | 814 | type | string | 是 | 设置事件类型。type为“locationIconStatusChange”,表示订阅定位图标状态变化。 | 815 | callback | Callback<[LocationIconStatus](#locationiconstatus12)> | 是 | 回调函数,返回定位图标状态。 | 816 817**错误码**: 818 819以下错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 820 821| 错误码ID | 错误信息 | 822| -------- | ---------------------------------------- | 823|202 | Permission verification failed. A non-system application calls a system API. | 824|401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 825|801 | Capability not supported. Failed to call ${geoLocationManager.on('locationIconStatusChange')} due to limited device capabilities. | 826|3301000 | The location service is unavailable. | 827 828**示例** 829 830 ```ts 831 import { geoLocationManager } from '@kit.LocationKit'; 832 let callback = (code: geoLocationManager.LocationIconStatus):void => { 833 console.log('LocationIconStatus: ' + JSON.stringify(code)); 834 } 835 try { 836 geoLocationManager.on('locationIconStatusChange', callback); 837 } catch (err) { 838 console.error("errCode:" + JSON.stringify(err)); 839 } 840 ``` 841 842 843## geoLocationManager.off('locationIconStatusChange')<sup>12+</sup> 844 845off(type: 'locationIconStatusChange', callback?: Callback<LocationIconStatus>): void; 846 847取消订阅定位图标状态的变化。 848 849**系统能力**:SystemCapability.Location.Location.Core 850 851**系统API**:此接口为系统接口。 852 853**参数**: 854 855 | 参数名 | 类型 | 必填 | 说明 | 856 | -------- | -------- | -------- | -------- | 857 | type | string | 是 | 设置事件类型。type为“locationIconStatusChange”,表示取消订阅定位图标状态变化。 | 858 | callback | Callback<[LocationIconStatus](#locationiconstatus12)> | 否 | 需要取消订阅的回调函数。该回调函数需要与on接口传入的回调函数保持一致。若无此参数,则取消当前类型的所有订阅。 | 859 860**错误码**: 861 862错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 863 864| 错误码ID | 错误信息 | 865| -------- | ---------------------------------------- | 866|202 | Permission verification failed. A non-system application calls a system API. | 867|401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 868|801 | Capability not supported. Failed to call ${geoLocationManager.off('locationIconStatusChange')} due to limited device capabilities. | 869|3301000 | The location service is unavailable. | 870 871**示例** 872 873 ```ts 874 import { geoLocationManager } from '@kit.LocationKit'; 875 let callback = (code: geoLocationManager.LocationIconStatus):void => { 876 console.log('LocationIconStatus: ' + JSON.stringify(code)); 877 } 878 try { 879 geoLocationManager.on('locationIconStatusChange', callback); 880 geoLocationManager.off('locationIconStatusChange', callback); 881 } catch (err) { 882 console.error("errCode:" + JSON.stringify(err)); 883 } 884 ``` 885 886 887## geoLocationManager.getLocationIconStatus<sup>12+</sup> 888 889getLocationIconStatus(): LocationIconStatus; 890 891获取当前的定位图标状态。 892 893**系统能力**:SystemCapability.Location.Location.Core 894 895**系统API**:此接口为系统接口。 896 897**返回值**: 898 899 | 类型 | 说明 | 900 | -------- | -------- | 901 | [LocationIconStatus](#locationiconstatus12) | 返回定位图标状态。 | 902 903**错误码**: 904 905以下错误码的详细介绍请参见[位置服务子系统错误码](errorcode-geoLocationManager.md)。 906 907| 错误码ID | 错误信息 | 908| -------- | ---------------------------------------- | 909|202 | Permission verification failed. A non-system application calls a system API. | 910|801 | Capability not supported. Failed to call ${geoLocationManager.getLocationIconStatus} due to limited device capabilities. | 911|3301000 | The location service is unavailable. | 912 913**示例** 914 915 ```ts 916 import { geoLocationManager } from '@kit.LocationKit'; 917 try { 918 let iconStatus = geoLocationManager.getLocationIconStatus(); 919 } catch (err) { 920 console.error("errCode:" + JSON.stringify(err)); 921 } 922 ```