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_LOCATIONohos.permission.LOCATION;无法单独申请ohos.permission.LOCATION27
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_LOCATIONohos.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&lt;[Location](#location)&gt; | 否 | 否 | 表示模拟位置数组。 |
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&lt;Array&lt;LocatingRequiredData&gt;&gt;): void;
207
208订阅定位业务所需数据的变化,主要包含WiFi和蓝牙扫描信息;根据入参决定是否启动WiFi和蓝牙扫描。使用callback异步回调。
209
210**需要权限**:ohos.permission.LOCATIONohos.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&lt;Array&lt;[LocatingRequiredData](#locatingrequireddata10)&gt;&gt; | 是 | 回调函数,返回定位业务所需数据。 |
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&lt;Array&lt;LocatingRequiredData&gt;&gt;): void;
256
257取消订阅定位业务所需数据的变化,并停止WiFi和蓝牙扫描。
258
259**需要权限**:ohos.permission.LOCATIONohos.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&lt;Array&lt;[LocatingRequiredData](#locatingrequireddata10)&gt;&gt; | 否 | 需要取消订阅的回调函数。该回调函数需要与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&lt;void&gt;): 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&lt;void&gt; | 是 | 回调函数,当打开位置服务成功,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&lt;void&gt;
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&lt;void&gt; | 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&lt;ReverseGeocodingMockInfo&gt;): 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&lt;[ReverseGeocodingMockInfo](#reversegeocodingmockinfo)&gt; | 是 | 指示逆地理编码模拟功能的配置参数数组。逆地理编码模拟功能的配置参数包含了一个位置和一个地名。 |
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&lt;Array&lt;LocatingRequiredData&gt;&gt;;
748
749单次获取定位业务所需数据,包含WiFi蓝牙扫描信息,使用Promise方式异步返回结果。
750
751**需要权限**:ohos.permission.LOCATIONohos.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&lt;Array&lt;[LocatingRequiredData](#locatingrequireddata10)&gt;&gt; | 以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&lt;LocationIconStatus&gt;): 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&lt;[LocationIconStatus](#locationiconstatus12)&gt; | 是 | 回调函数,返回定位图标状态。 |
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&lt;LocationIconStatus&gt;): 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&lt;[LocationIconStatus](#locationiconstatus12)&gt;  | 否 | 需要取消订阅的回调函数。该回调函数需要与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  ```