• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.      |
59| 16000001 | The specified ability does not exist.                        |
60| 16000002 | Incorrect ability type.                                      |
61| 16000004 | Cannot start an 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| 16000011 | The context does not exist.                                  |
66| 16000012 | The application is controlled.                               |
67| 16000013 | The application is controlled by EDM.                        |
68| 16000019 | No matching ability is found.                                |
69| 16000050 | Internal error.                                              |
70| 16200001 | The caller has been released.                                |
71
72以上错误码详细介绍请参考[元能力子系统错误码](../apis-ability-kit/errorcode-ability.md)。
73
74**示例:**
75
76```ts
77import { FenceExtensionAbility, geoLocationManager } from '@kit.LocationKit';
78import { BusinessError } from '@kit.BasicServicesKit';
79import { Want } from '@kit.AbilityKit';
80
81export class MyFenceExtensionAbility extends FenceExtensionAbility {
82  onFenceStatusChange(transition: geoLocationManager.GeofenceTransition, additions: Record<string, string>): void {
83    // 接受围栏状态变化事件,处理业务逻辑
84    console.info(`on geofence transition,id:${transition.geofenceId},event:${transition.transitionEvent},additions:${JSON.stringify(additions)}`);
85    let want: Want = {
86      bundleName: "com.example.myapp",
87      abilityName: "MyServiceExtensionAbility"
88    };
89    try {
90      this.context.startAbility(want)
91        .then(() => {
92          // 执行正常业务
93          console.info('startAbility succeed');
94        })
95        .catch((error: BusinessError) => {
96          // 处理业务逻辑错误
97          console.error('startAbility failed, error.code: ' + JSON.stringify(error.code) +
98            ' error.message: ' + JSON.stringify(error.message));
99        });
100    } catch (paramError) {
101      // 处理入参错误异常
102      let code = (paramError as BusinessError).code;
103      let message = (paramError as BusinessError).message;
104      console.error('startAbility failed, error.code: ' + JSON.stringify(code) +
105        ' error.message: ' + JSON.stringify(message));
106    }
107  }
108}
109```