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```