1# @ohos.app.form.FormExtensionAbility (FormExtensionAbility)
2
3FormExtensionAbility为卡片扩展模块,提供卡片创建、销毁、刷新等生命周期回调。
4
5> **说明:**
6>
7> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8>
9> 如下模块不支持在FormExtensionAbility引用,可能会导致程序异常退出。
10> - @ohos.ability.particleAbility (ParticleAbility模块)
11> - @ohos.multimedia.audio (音频管理)
12> - @ohos.multimedia.camera (相机管理)
13> - @ohos.multimedia.media (媒体服务)
14> - @ohos.resourceschedule.backgroundTaskManager (后台任务管理)
15
16## 导入模块
17
18```ts
19import { FormExtensionAbility } from '@kit.FormKit';
20```
21
22## 属性
23
24**模型约束:** 此接口仅可在Stage模型下使用。
25
26**系统能力:** SystemCapability.Ability.Form
27
28| 名称    | 类型                                                         | 可读 | 可写 | 说明                                                         |
29| ------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
30| context | [FormExtensionContext](js-apis-inner-application-formExtensionContext.md) | 是   | 否   | FormExtensionAbility的上下文环境,继承自[ExtensionContext](../apis-ability-kit/js-apis-inner-application-extensionContext.md)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
31
32## onAddForm
33
34onAddForm(want: Want): formBindingData.FormBindingData
35
36卡片提供方接收创建卡片的通知接口。
37
38**模型约束:** 此接口仅可在Stage模型下使用。
39
40**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
41
42**系统能力:** SystemCapability.Ability.Form
43
44**参数:**
45
46| 参数名 | 类型                                   | 必填 | 说明                                                         |
47| ------ | -------------------------------------- | ---- | ------------------------------------------------------------ |
48| want   | [Want](../apis-ability-kit/js-apis-app-ability-want.md) | 是   | 当前卡片相关的Want类型信息,包括卡片ID、卡片名称、卡片样式等。这些卡片信息必须作为持久数据进行管理,以便后续更新和删除卡片。 |
49
50**返回值:**
51
52| 类型                                                         | 说明                                                        |
53| ------------------------------------------------------------ | ----------------------------------------------------------- |
54| [formBindingData.FormBindingData](js-apis-app-form-formBindingData.md#formbindingdata) | formBindingData.FormBindingData对象,卡片要显示的数据。 |
55
56**示例:**
57
58```ts
59import { formBindingData, FormExtensionAbility } from '@kit.FormKit';
60import { Want } from '@kit.AbilityKit';
61
62export default class MyFormExtensionAbility extends FormExtensionAbility {
63  onAddForm(want: Want) {
64    console.log(`FormExtensionAbility onAddForm, want: ${want.abilityName}`);
65    let dataObj1: Record<string, string> = {
66      'temperature': '11c',
67      'time': '11:00'
68    };
69
70    let obj1: formBindingData.FormBindingData = formBindingData.createFormBindingData(dataObj1);
71    return obj1;
72  }
73}
74```
75
76## onCastToNormalForm
77
78onCastToNormalForm(formId: string): void
79
80卡片提供方接收临时卡片转常态卡片的通知接口。
81
82**模型约束:** 此接口仅可在Stage模型下使用。
83
84**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
85
86**系统能力:** SystemCapability.Ability.Form
87
88**参数:**
89
90| 参数名 | 类型   | 必填 | 说明                     |
91| ------ | ------ | ---- | ------------------------ |
92| formId | string | 是   | 请求转换为常态的卡片标识。 |
93
94**示例:**
95
96```ts
97import { FormExtensionAbility } from '@kit.FormKit';
98
99export default class MyFormExtensionAbility extends FormExtensionAbility {
100  onCastToNormalForm(formId: string) {
101    console.log(`FormExtensionAbility onCastToNormalForm, formId: ${formId}`);
102  }
103};
104```
105
106## onUpdateForm
107
108onUpdateForm(formId: string, wantParams?: Record<string, Object>): void
109
110卡片提供方接收携带参数的更新卡片的通知接口。获取最新数据后调用formProvider的[updateForm](js-apis-app-form-formProvider.md#updateform)接口刷新卡片数据。
111
112**模型约束:** 此接口仅可在Stage模型下使用。
113
114**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
115
116**系统能力:** SystemCapability.Ability.Form
117
118**参数:**
119
120| 参数名 | 类型   | 必填 | 说明               |
121| ------ | ------ | ---- | ------------------ |
122| formId | string | 是   | 请求更新的卡片ID。 |
123| wantParams<sup>12+</sup> | Record<string, Object> | 否   | 更新参数。 |
124
125**示例:**
126
127```ts
128import { formBindingData, FormExtensionAbility, formProvider } from '@kit.FormKit';
129import { BusinessError } from '@kit.BasicServicesKit';
130
131export default class MyFormExtensionAbility extends FormExtensionAbility {
132  onUpdateForm(formId: string, wantParams?: Record<string, Object>) {
133    console.log(`FormExtensionAbility onUpdateForm, formId: ${formId},
134        wantPara: ${wantParams?.['ohos.extra.param.key.host_bg_inverse_color']}`);
135    let param: Record<string, string> = {
136      'temperature': '22c',
137      'time': '22:00'
138    }
139    let obj2: formBindingData.FormBindingData = formBindingData.createFormBindingData(param);
140    formProvider.updateForm(formId, obj2).then(() => {
141      console.log(`FormExtensionAbility context updateForm`);
142    }).catch((error: BusinessError) => {
143      console.error(`FormExtensionAbility context updateForm failed, data: ${error}`);
144    });
145  }
146};
147```
148
149## onChangeFormVisibility
150
151onChangeFormVisibility(newStatus: Record\<string, number>): void
152
153卡片提供方接收修改可见性的通知接口。
154该接口仅对系统应用生效,且需要将formVisibleNotify配置为true。
155
156**模型约束:** 此接口仅可在Stage模型下使用。
157
158**系统能力:** SystemCapability.Ability.Form
159
160**参数:**
161
162| 参数名  | 类型   | 必填 | 说明                   |
163| ------- | ------ | ---- | ---------------------- |
164| newStatus  | Record\<string, number> | 是   | 请求修改的卡片标识和可见状态。 |
165
166**示例:**
167
168```ts
169import { formBindingData, FormExtensionAbility, formProvider } from '@kit.FormKit';
170import { BusinessError } from '@kit.BasicServicesKit';
171
172// ArkTS规范中ets文件无法使用Object.keysfor..in...获取Object的key值,请使用自定义函数getObjKeys代替。
173// 使用时请将此函数单独抽离至一个ts文件中并导出,在需要用到的ets文件中导入此函数后使用。
174function getObjKeys(obj: Object): string[] {
175  let keys = Object.keys(obj);
176  return keys;
177}
178
179export default class MyFormExtensionAbility extends FormExtensionAbility {
180  onChangeFormVisibility(newStatus: Record<string, number>) {
181    console.log(`FormExtensionAbility onChangeFormVisibility, newStatus: ${newStatus}`);
182    let param: Record<string, string> = {
183      'temperature': '22c',
184      'time': '22:00'
185    }
186    let obj2: formBindingData.FormBindingData = formBindingData.createFormBindingData(param);
187
188    let keys: string[] = getObjKeys(newStatus);
189
190    for (let i: number = 0; i < keys.length; i++) {
191      console.log(`FormExtensionAbility onChangeFormVisibility, key: ${keys[i]}, value= ${newStatus[keys[i]]}`);
192      formProvider.updateForm(keys[i], obj2).then(() => {
193        console.log(`FormExtensionAbility context updateForm`);
194      }).catch((error: BusinessError) => {
195        console.error(`Operation updateForm failed. Cause: ${JSON.stringify(error)}`);
196      });
197    }
198  }
199};
200```
201
202## onFormEvent
203
204onFormEvent(formId: string, message: string): void
205
206卡片提供方接收处理卡片事件的通知接口。
207
208**模型约束:** 此接口仅可在Stage模型下使用。
209
210**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
211
212**系统能力:** SystemCapability.Ability.Form
213
214**参数:**
215
216| 参数名  | 类型   | 必填 | 说明                   |
217| ------- | ------ | ---- | ---------------------- |
218| formId  | string | 是   | 请求触发事件的卡片标识。 |
219| message | string | 是   | 事件消息。             |
220
221**示例:**
222
223```ts
224import { FormExtensionAbility } from '@kit.FormKit';
225
226export default class MyFormExtensionAbility extends FormExtensionAbility {
227  onFormEvent(formId: string, message: string) {
228    console.log(`FormExtensionAbility onFormEvent, formId: ${formId}, message: ${message}`);
229  }
230};
231```
232
233## onRemoveForm
234
235onRemoveForm(formId: string): void
236
237卡片提供方接收销毁卡片的通知接口。
238
239**模型约束:** 此接口仅可在Stage模型下使用。
240
241**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
242
243**系统能力:** SystemCapability.Ability.Form
244
245**参数:**
246
247| 参数名 | 类型   | 必填 | 说明               |
248| ------ | ------ | ---- | ------------------ |
249| formId | string | 是   | 请求销毁的卡片标识。 |
250
251**示例:**
252
253```ts
254import { FormExtensionAbility } from '@kit.FormKit';
255
256export default class MyFormExtensionAbility extends FormExtensionAbility {
257  onRemoveForm(formId: string) {
258    console.log(`FormExtensionAbility onRemoveForm, formId: ${formId}`);
259  }
260};
261```
262
263## onConfigurationUpdate
264
265onConfigurationUpdate(newConfig: Configuration): void
266
267当系统配置更新时调用。
268仅当前formExtensionAbility存活时更新配置才会触发此生命周期。需要注意:formExtensionAbility创建后10秒内无操作将会被清理。
269
270**模型约束:** 此接口仅可在Stage模型下使用。
271
272**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
273
274**系统能力:** SystemCapability.Ability.Form
275
276**参数:**
277
278| 参数名 | 类型 | 必填 | 说明 |
279| -------- | -------- | -------- | -------- |
280| newConfig | [Configuration](../apis-ability-kit/js-apis-app-ability-configuration.md) | 是 | 表示需要更新的配置信息。 |
281
282**示例:**
283
284```ts
285import { FormExtensionAbility } from '@kit.FormKit';
286import { Configuration } from '@kit.AbilityKit';
287
288export default class MyFormExtensionAbility extends FormExtensionAbility {
289  onConfigurationUpdate(newConfig: Configuration) {
290    // 仅当前formExtensionAbility存活时更新配置才会触发此生命周期。
291    // 需要注意:formExtensionAbility创建后10秒内无操作将会被清理。
292    console.log(`onConfigurationUpdate, config: ${JSON.stringify(newConfig)}`);
293  }
294};
295```
296
297## onAcquireFormState
298
299onAcquireFormState?(want: Want): formInfo.FormState
300
301卡片提供方接收查询卡片状态通知接口,默认返回卡片初始状态(该方法可以选择性重写)。
302
303**模型约束:** 此接口仅可在Stage模型下使用。
304
305**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
306
307**系统能力:** SystemCapability.Ability.Form
308
309**参数:**
310
311| 参数名 | 类型 | 必填 | 说明 |
312| -------- | -------- | -------- | -------- |
313| want | [Want](../apis-ability-kit/js-apis-app-ability-want.md) | 是 | want表示获取卡片状态的描述。描述包括Bundle名称、能力名称、模块名称、卡片名和卡片维度。 |
314
315**示例:**
316
317```ts
318import { FormExtensionAbility, formInfo } from '@kit.FormKit';
319import { Want } from '@kit.AbilityKit';
320
321export default class MyFormExtensionAbility extends FormExtensionAbility {
322  onAcquireFormState(want: Want) {
323    console.log(`FormExtensionAbility onAcquireFormState, want: ${want}`);
324    return formInfo.FormState.UNKNOWN;
325  }
326};
327```
328
329## onStop<sup>12+</sup>
330
331onStop?(): void
332
333当卡片提供方的卡片进程退出时,触发该回调。
334
335**模型约束:** 此接口仅可在Stage模型下使用。
336
337**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
338
339**系统能力:** SystemCapability.Ability.Form
340
341**示例:**
342
343```ts
344import { FormExtensionAbility } from '@kit.FormKit';
345
346export default class MyFormExtensionAbility extends FormExtensionAbility {
347  onStop() {
348    console.log(`FormExtensionAbility onStop`);
349  }
350}
351```
352