1# @ohos.app.ability.FenceExtensionContext (FenceExtensionContext系统接口)
2
3FenceExtensionContext是FenceExtensionAbility的上下文环境,继承自[ExtensionContext](../apis-ability-kit/js-apis-inner-application-extensionContext.md),提供FenceExtensionAbility的相关配置信息以及启动Ability接口。
4
5> **说明:**
6>
7> 本模块首批接口从API version 14开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8> 本模块接口仅可在Stage模型下使用。
9> 本模块接口为系统接口。
10
11## 导入模块
12
13```ts
14import { FenceExtensionContext } from '@kit.LocationKit';
15```
16
17## 使用说明
18
19在使用FenceExtensionContext的功能前,需要通过FenceExtensionAbility获取。
20
21```ts
22import { FenceExtensionAbility, FenceExtensionContext } from '@kit.LocationKit';
23
24class MyFenceExtensionAbility extends FenceExtensionAbility {
25  onCreate() {
26    let fenceExtensionContext: FenceExtensionContext = this.context;
27  }
28}
29```
30
31## FenceExtensionContext.startAbility
32
33startAbility(want: Want): Promise<void>
34
35启动Ability。使用Promise异步回调。仅支持在主线程调用。
36
37**系统接口:** 此接口为系统接口。
38
39**系统能力:** SystemCapability.Location.Location.Geofence
40
41**参数:**
42
43| 参数名 |                类型               | 必填 |              说明               |
44| ------| --------------------------------- | ---- | -------------------------------------- |
45| want| [Want](../apis-ability-kit/js-apis-app-ability-want.md) | 是  | 	启动Ability的want信息。 |
46
47**返回值:**
48
49| 类型          | 说明                                |
50| ------------ | ---------------------------------- |
51| Promise<void> | Promise形式返回启动结果。 |
52
53**错误码:**
54
55| 错误码ID | 错误信息                                                     |
56| -------- | ------------------------------------------------------------ |
57| 202     | The application is not system-app, can not use system-api.      |
58| 401     | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed.      |
59| 16000001 | The specified ability does not exist.                        |
60| 16000002 | Incorrect ability type.                                      |
61| 16000004 | Can not start invisible component.                           |
62| 16000005 | The specified process does not have the permission.          |
63| 16000006 | Cross-user operations are not allowed.                       |
64| 16000008 | The crowdtesting application expires.                        |
65| 16000009 | An ability cannot be started or stopped in Wukong mode.      |
66| 16000011 | The context does not exist.                                  |
67| 16000050 | Internal error.                                              |
68| 16000053 | The ability is not on the top of the UI.                     |
69| 16000055 | Installation-free timed out.                                 |
70| 16200001 | The caller has been released.                                |
71| 16300003 | The target application is not self application.              |
72
73以上错误码详细介绍请参考[元能力子系统错误码](../apis-ability-kit/errorcode-ability.md)。
74
75**示例:**
76
77```ts
78import { FenceExtensionAbility, FenceExtensionContext, geoLocationManager } from '@kit.LocationKit';
79import { BusinessError } from '@kit.BasicServicesKit';
80
81class MyFenceExtensionAbility extends FenceExtensionAbility {
82  onFenceStatusChange(transition: geoLocationManager.GeofenceTransition, additions: Record<string, string>): void {
83    // 接受围栏状态变化事件,处理业务逻辑
84    hilog.info(0x0000, "TAG",
85      `on geofence transition,id:${transition.geofenceId},event:${transition.transitionEvent},additions:${JSON.stringify(additions)}`);
86    let want: Want = {
87      bundleName: "com.example.myapp",
88      abilityName: "MyServiceExtensionAbility"
89    };
90    try {
91      this.context.startAbility(want)
92        .then(() => {
93          // 执行正常业务
94          hilog.info(0x0000, "TAG", 'startAbility succeed');
95        })
96        .catch((error: BusinessError) => {
97          // 处理业务逻辑错误
98          hilog.info(0x0000, "TAG", 'startAbility failed, error.code: ' + JSON.stringify(error.code) +
99            ' error.message: ' + JSON.stringify(error.message));
100        });
101    } catch (paramError) {
102      // 处理入参错误异常
103      let code = (paramError as BusinessError).code;
104      let message = (paramError as BusinessError).message;
105      hilog.info(0x0000, "TAG", 'startAbility failed, error.code: ' + JSON.stringify(code) +
106        ' error.message: ' + JSON.stringify(message));
107    }
108  }
109}
110```