1# LiveFormExtensionContext 2<!--Kit: Form Kit--> 3<!--Subsystem: Ability--> 4<!--Owner: @cx983299475--> 5<!--Designer: @xueyulong--> 6<!--Tester: @chenmingze--> 7<!--Adviser: @Brilliantry_Rui--> 8LiveFormExtensionContext是[LiveFormExtensionAbility](./js-apis-app-form-LiveFormExtensionAbility.md)的上下文,继承自[ExtensionContext](../apis-ability-kit/js-apis-inner-application-extensionContext.md)。 9 10> **说明:** 11> 12> 本模块首批接口从API version 20开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 13> 14> 本模块接口仅可在Stage模型下使用。 15 16## 导入模块 17```ts 18import { LiveFormExtensionAbility } from '@kit.FormKit'; 19``` 20 21## LiveFormExtensionContext 22 23LiveFormExtensionContext提供允许访问特定于LiveFormExtensionAbility资源的能力,继承自[ExtensionContext](../apis-ability-kit/js-apis-inner-application-extensionContext.md)。 24 25### startAbilityByLiveForm 26 27startAbilityByLiveForm(want: Want): Promise<void> 28 29拉起互动卡片提供方(应用)的页面,使用Promise异步回调。 30 31该接口仅支持拉起互动卡片提供方(应用)的页面,不支持拉起其他应用的页面,否则会抛出错误码16501011。 32 33该接口建议在点击事件回调中调用,不建议在其他手势事件回调中调用,不支持非手势事件直接调用,否则会抛出错误码16501011。 34 35另外,在点击事件回调中,支持直接调用,不支持延时后调用,否则会抛出错误码16501011。 36 37**模型约束:** 此接口仅可在Stage模型下使用。 38 39**系统能力:** SystemCapability.Ability.Form 40 41**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。 42 43**参数:** 44 45 | 参数名 | 类型 | 必填 | 说明 | 46 | ------ | ------ | ---- | ------------------------------------- | 47 | want | [Want](../apis-ability-kit/js-apis-app-ability-want.md) | 是 | 需要被拉起的应用页面信息。[仅支持使用显式want。](../../../application-dev/application-models/ability-startup-with-explicit-want.md) | 48 49**返回值:** 50 | 类型 | 说明 | 51 | ------ | ------ | 52 | Promise<void> | Promise对象,无返回结果。 | 53 54**错误码:** 55 56以下错误码的详细介绍请参见[卡片错误码](errorcode-form.md)和[通用错误码](../errorcode-universal.md)。 57 58| 错误码ID | 错误信息 | 59| -------- | ------------------------------------------------------------ | 60| 801 | Capability not supported due to limited device capabilities. | 61| 16500050 | An IPC connection error happened. | 62| 16500100 | Failed to obtain the configuration information. | 63| 16501000 | An internal functional error occurred. | 64| 16501011 | The form can not support this operation. | 65 66**示例:** 67 68```ts 69// MyLiveFormExtensionAbility.ets 70import { formInfo, LiveFormInfo, LiveFormExtensionAbility } from '@kit.FormKit'; 71import { UIExtensionContentSession } from '@kit.AbilityKit'; 72 73export default class MyLiveFormExtensionAbility extends LiveFormExtensionAbility { 74 onLiveFormCreate(liveFormInfo: LiveFormInfo, session: UIExtensionContentSession) { 75 // 1.将LiveFormExtensionContext传给互动卡片的页面组件 76 let storage: LocalStorage = new LocalStorage(); 77 storage.setOrCreate('context', this.context); 78 session.loadContent('pages/MyLiveFormPage', storage); 79 } 80}; 81``` 82```ts 83// pages/MyLiveFormPage.ets 84import { BusinessError } from '@kit.BasicServicesKit'; 85import LiveFormExtensionContext from 'application/LiveFormExtensionContext'; 86 87@Entry 88@Component 89struct MyLiveFormPage { 90 private storageForMyLiveFormPage: LocalStorage | undefined = undefined; 91 private liveFormContext: LiveFormExtensionContext | undefined = undefined; 92 93 aboutToAppear(): void { 94 // 2.获取LiveFormExtensionContext 95 this.storageForMyLiveFormPage = this.getUIContext().getSharedLocalStorage(); 96 this.liveFormContext = this.storageForMyLiveFormPage?.get<LiveFormExtensionContext>('context'); 97 } 98 99 private startAbilityByLiveForm(): void { 100 try { 101 // 请开发者替换为实际的want信息 102 this.liveFormContext?.startAbilityByLiveForm({ 103 bundleName: 'com.example.liveformdemo', 104 abilityName: 'EntryAbility', 105 }) 106 .then(() => { 107 console.info('startAbilityByLiveForm succeed'); 108 }) 109 .catch((err: BusinessError) => { 110 console.error(`startAbilityByLiveForm failed, code is ${err?.code}, message is ${err?.message}`); 111 }); 112 } catch (e) { 113 console.error(`startAbilityByLiveForm failed, code is ${e?.code}, message is ${e?.message}`); 114 } 115 } 116 117 build() { 118 Stack() { 119 // 请开发者替换为实际的页面 120 } 121 .onClick(() => { 122 // 3.在点击事件回调中直接使用该接口 123 console.info('MyLiveFormPage click to start ability'); 124 if (!this.liveFormContext) { 125 console.info('MyLiveFormPage liveFormContext is empty'); 126 return; 127 } 128 this.startAbilityByLiveForm(); 129 }) 130 } 131} 132```