• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&lt;void&gt;
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&lt;void&gt;  |  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```