• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.app.form.FormExtensionAbility (FormExtensionAbility)
2<!--Kit: Form Kit-->
3<!--Subsystem: Ability-->
4<!--Owner: @cx983299475-->
5<!--Designer: @xueyulong-->
6<!--Tester: @chenmingze-->
7<!--Adviser: @Brilliantry_Rui-->
8FormExtensionAbility为卡片扩展模块,提供卡片创建、销毁、刷新等生命周期回调。
9
10> **说明:**
11>
12> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
13>
14> FormExtensionAbility创建后10秒内无操作将会被清理。
15>
16> 如下模块不支持在FormExtensionAbility引用,可能会导致程序异常退出。
17> - @ohos.ability.particleAbility (ParticleAbility模块)
18> - @ohos.multimedia.audio (音频管理)
19> - @ohos.multimedia.camera (相机管理)
20> - @ohos.multimedia.media (媒体服务)
21> - @ohos.resourceschedule.backgroundTaskManager (后台任务管理)
22
23
24## 导入模块
25
26```ts
27import { FormExtensionAbility } from '@kit.FormKit';
28```
29
30## FormExtensionAbility
31
32卡片扩展类。包含卡片提供方接收创建卡片、修改可见性等的通知接口。
33
34**模型约束:** 此接口仅可在Stage模型下使用。
35
36**系统能力:** SystemCapability.Ability.Form
37
38### 属性
39
40**模型约束:** 此接口仅可在Stage模型下使用。
41
42**系统能力:** SystemCapability.Ability.Form
43
44| 名称    | 类型                                                         | 可读 | 可写 | 说明                                                         |
45| ------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
46| context | [FormExtensionContext](js-apis-inner-application-formExtensionContext.md) | 是   | 否   | FormExtensionAbility的上下文环境,继承自[ExtensionContext](../apis-ability-kit/js-apis-inner-application-extensionContext.md)。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。|
47
48### FormExtensionAbility.onAddForm
49
50onAddForm(want: Want): formBindingData.FormBindingData
51
52卡片提供方接收创建卡片的通知接口。
53
54**模型约束:** 此接口仅可在Stage模型下使用。
55
56**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
57
58**系统能力:** SystemCapability.Ability.Form
59
60**参数:**
61
62| 参数名 | 类型                                   | 必填 | 说明                                                         |
63| ------ | -------------------------------------- | ---- | ------------------------------------------------------------ |
64| want   | [Want](../apis-ability-kit/js-apis-app-ability-want.md) | 是   | 当前卡片相关的Want类型信息,其中Want中的parameters为自定义取值,取值可以包含[卡片参数枚举](./js-apis-app-form-formInfo.md#formparam)中的一个或多个,如卡片ID、卡片名称、卡片样式等。这些卡片信息必须作为持久数据进行管理,以便后续更新和删除卡片。 |
65
66**返回值:**
67
68| 类型                                                         | 说明                                                        |
69| ------------------------------------------------------------ | ----------------------------------------------------------- |
70| [formBindingData.FormBindingData](js-apis-app-form-formBindingData.md#formbindingdata) | formBindingData.FormBindingData对象,卡片要显示的数据。 |
71
72**示例:**
73
74```ts
75import { formBindingData, FormExtensionAbility } from '@kit.FormKit';
76import { Want } from '@kit.AbilityKit';
77
78export default class MyFormExtensionAbility extends FormExtensionAbility {
79  onAddForm(want: Want) {
80    console.log(`FormExtensionAbility onAddForm, want: ${want.abilityName}`);
81    let dataObj1: Record<string, string> = {
82      'temperature': '11c',
83      'time': '11:00'
84    };
85
86    let obj1: formBindingData.FormBindingData = formBindingData.createFormBindingData(dataObj1);
87    return obj1;
88  }
89}
90```
91
92### FormExtensionAbility.onCastToNormalForm
93
94onCastToNormalForm(formId: string): void
95
96卡片提供方收到卡片使用方将临时卡片转常态卡片的通知接口。临时卡片、常态卡片是卡片使用方的概念,其中:临时卡片是短期存在的,在特定事件或用户行为后显示,完成后自动消失。常态卡片是持久存在的,在用户未进行清除或更改的情况下,会一直存在,平时开发的功能卡片属于常态卡片。当前卡片使用方不会使用临时卡片。
97
98**模型约束:** 此接口仅可在Stage模型下使用。
99
100**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
101
102**系统能力:** SystemCapability.Ability.Form
103
104**参数:**
105
106| 参数名 | 类型   | 必填 | 说明                     |
107| ------ | ------ | ---- | ------------------------ |
108| formId | string | 是   | 请求转换为常态的卡片标识。 |
109
110**示例:**
111
112```ts
113import { FormExtensionAbility } from '@kit.FormKit';
114
115export default class MyFormExtensionAbility extends FormExtensionAbility {
116  onCastToNormalForm(formId: string) {
117    // 卡片提供方收到卡片使用方将临时卡片转常态卡片的通知时触发,开发者需根据实际需求做相应的处理
118    console.log(`FormExtensionAbility onCastToNormalForm, formId: ${formId}`);
119  }
120};
121```
122
123### FormExtensionAbility.onUpdateForm
124
125onUpdateForm(formId: string, wantParams?: Record<string, Object>): void
126
127卡片提供方接收携带参数的更新卡片的通知接口。获取最新数据后调用formProvider的[updateForm](js-apis-app-form-formProvider.md#formproviderupdateform)接口刷新卡片数据。
128
129**模型约束:** 此接口仅可在Stage模型下使用。
130
131**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
132
133**系统能力:** SystemCapability.Ability.Form
134
135**参数:**
136
137| 参数名 | 类型   | 必填 | 说明               |
138| ------ | ------ | ---- | ------------------ |
139| formId | string | 是   | 请求更新的卡片ID。 |
140| wantParams<sup>12+</sup> | Record<string, Object> | 否   | 更新参数。 |
141
142**示例:**
143
144```ts
145import { formBindingData, FormExtensionAbility, formProvider } from '@kit.FormKit';
146import { BusinessError } from '@kit.BasicServicesKit';
147
148export default class MyFormExtensionAbility extends FormExtensionAbility {
149  onUpdateForm(formId: string, wantParams?: Record<string, Object>) {
150    console.log(`FormExtensionAbility onUpdateForm, formId: ${formId},
151        wantPara: ${wantParams?.['ohos.extra.param.key.host_bg_inverse_color']}`);
152    let param: Record<string, string> = {
153      'temperature': '22c',
154      'time': '22:00'
155    }
156    let obj2: formBindingData.FormBindingData = formBindingData.createFormBindingData(param);
157    formProvider.updateForm(formId, obj2).then(() => {
158      console.log(`FormExtensionAbility context updateForm`);
159    }).catch((error: BusinessError) => {
160      console.error(`FormExtensionAbility context updateForm failed, data: ${error}`);
161    });
162  }
163};
164```
165
166### FormExtensionAbility.onChangeFormVisibility
167
168onChangeFormVisibility(newStatus: Record\<string, number>): void
169
170卡片提供方接收修改可见性的通知接口。
171该接口仅对系统应用生效,且需要将formVisibleNotify配置为true。
172
173**模型约束:** 此接口仅可在Stage模型下使用。
174
175**系统能力:** SystemCapability.Ability.Form
176
177**参数:**
178
179| 参数名  | 类型   | 必填 | 说明                   |
180| ------- | ------ | ---- | ---------------------- |
181| newStatus  | Record\<string, number> | 是   | 请求修改的卡片标识和可见状态。 |
182
183**示例:**
184
185```ts
186import { formBindingData, FormExtensionAbility, formProvider } from '@kit.FormKit';
187import { BusinessError } from '@kit.BasicServicesKit';
188
189// ArkTS规范中ets文件无法使用Object.keysfor..in...获取Object的key值,请使用自定义函数getObjKeys代替。
190// 使用时请将此函数单独抽离至一个ts文件中并导出,在需要用到的ets文件中导入此函数后使用。
191function getObjKeys(obj: Object): string[] {
192  let keys = Object.keys(obj);
193  return keys;
194}
195
196export default class MyFormExtensionAbility extends FormExtensionAbility {
197  onChangeFormVisibility(newStatus: Record<string, number>) {
198    console.log(`FormExtensionAbility onChangeFormVisibility, newStatus: ${newStatus}`);
199    let param: Record<string, string> = {
200      'temperature': '22c',
201      'time': '22:00'
202    }
203    let obj2: formBindingData.FormBindingData = formBindingData.createFormBindingData(param);
204
205    let keys: string[] = getObjKeys(newStatus);
206
207    for (let i: number = 0; i < keys.length; i++) {
208      console.log(`FormExtensionAbility onChangeFormVisibility, key: ${keys[i]}, value= ${newStatus[keys[i]]}`);
209      formProvider.updateForm(keys[i], obj2).then(() => {
210        console.log(`FormExtensionAbility context updateForm`);
211      }).catch((error: BusinessError) => {
212        console.error(`Operation updateForm failed. Cause: ${JSON.stringify(error)}`);
213      });
214    }
215  }
216};
217```
218
219### FormExtensionAbility.onFormEvent
220
221onFormEvent(formId: string, message: string): void
222
223卡片提供方接收处理卡片事件的通知接口。
224
225**模型约束:** 此接口仅可在Stage模型下使用。
226
227**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
228
229**系统能力:** SystemCapability.Ability.Form
230
231**参数:**
232
233| 参数名  | 类型   | 必填 | 说明                   |
234| ------- | ------ | ---- | ---------------------- |
235| formId  | string | 是   | 请求触发事件的卡片标识。 |
236| message | string | 是   | 事件消息。             |
237
238**示例:**
239
240```ts
241import { FormExtensionAbility } from '@kit.FormKit';
242
243export default class MyFormExtensionAbility extends FormExtensionAbility {
244  onFormEvent(formId: string, message: string) {
245    console.log(`FormExtensionAbility onFormEvent, formId: ${formId}, message: ${message}`);
246  }
247};
248```
249
250### FormExtensionAbility.onRemoveForm
251
252onRemoveForm(formId: string): void
253
254卡片提供方接收销毁卡片的通知接口。
255
256**模型约束:** 此接口仅可在Stage模型下使用。
257
258**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
259
260**系统能力:** SystemCapability.Ability.Form
261
262**参数:**
263
264| 参数名 | 类型   | 必填 | 说明               |
265| ------ | ------ | ---- | ------------------ |
266| formId | string | 是   | 请求销毁的卡片标识。 |
267
268**示例:**
269
270```ts
271import { FormExtensionAbility } from '@kit.FormKit';
272
273export default class MyFormExtensionAbility extends FormExtensionAbility {
274  onRemoveForm(formId: string) {
275    console.log(`FormExtensionAbility onRemoveForm, formId: ${formId}`);
276  }
277};
278```
279
280### FormExtensionAbility.onConfigurationUpdate
281
282onConfigurationUpdate(newConfig: Configuration): void
283
284当系统配置项变更时调用,仅当FormExtensionAbility存活时才会触发onConfigurationUpdate回调。<!--Del-->此外,从API version 20开始,对于系统应用,当系统语言发生变更时会拉起FormExtensionAbility再触发onConfigurationUpdate回调。<!--DelEnd-->
285
286**模型约束:** 此接口仅可在Stage模型下使用。
287
288**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
289
290**系统能力:** SystemCapability.Ability.Form
291
292**参数:**
293
294| 参数名 | 类型 | 必填 | 说明 |
295| -------- | -------- | -------- | -------- |
296| newConfig | [Configuration](../apis-ability-kit/js-apis-app-ability-configuration.md) | 是 | 表示需要更新的配置信息。 |
297
298**示例:**
299
300```ts
301import { FormExtensionAbility } from '@kit.FormKit';
302import { Configuration } from '@kit.AbilityKit';
303
304export default class MyFormExtensionAbility extends FormExtensionAbility {
305  onConfigurationUpdate(newConfig: Configuration) {
306    // 仅当前formExtensionAbility存活时更新配置才会触发此生命周期。
307    // 需要注意:formExtensionAbility创建后10秒内无操作将会被清理。
308    console.log(`onConfigurationUpdate, config: ${JSON.stringify(newConfig)}`);
309  }
310};
311```
312
313### FormExtensionAbility.onAcquireFormState
314
315onAcquireFormState?(want: Want): formInfo.FormState
316
317卡片提供方接收查询卡片状态通知接口,默认返回卡片初始状态(该方法可以选择性重写)。
318
319**模型约束:** 此接口仅可在Stage模型下使用。
320
321**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
322
323**系统能力:** SystemCapability.Ability.Form
324
325**参数:**
326
327| 参数名 | 类型 | 必填 | 说明 |
328| -------- | -------- | -------- | -------- |
329| want | [Want](../apis-ability-kit/js-apis-app-ability-want.md) | 是 | want表示获取卡片状态的描述。描述包括Bundle名称、能力名称、模块名称、卡片名和卡片维度。 |
330
331**返回值:**
332
333| 类型                                                         | 说明                                                        |
334| ------------------------------------------------------------ | ----------------------------------------------------------- |
335| [formInfo.FormState](js-apis-app-form-formInfo.md#formstate) | formInfo.FormState枚举,表示卡片当前的状态。 |
336
337**示例:**
338
339```ts
340import { FormExtensionAbility, formInfo } from '@kit.FormKit';
341import { Want } from '@kit.AbilityKit';
342
343export default class MyFormExtensionAbility extends FormExtensionAbility {
344  onAcquireFormState(want: Want) {
345    console.log(`FormExtensionAbility onAcquireFormState, want: ${want}`);
346    return formInfo.FormState.UNKNOWN;
347  }
348};
349```
350
351### FormExtensionAbility.onStop<sup>12+</sup>
352
353onStop?(): void
354
355当卡片提供方的卡片进程退出时,触发该回调。
356
357**模型约束:** 此接口仅可在Stage模型下使用。
358
359**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
360
361**系统能力:** SystemCapability.Ability.Form
362
363**示例:**
364
365```ts
366import { FormExtensionAbility } from '@kit.FormKit';
367
368export default class MyFormExtensionAbility extends FormExtensionAbility {
369  onStop() {
370    console.log(`FormExtensionAbility onStop`);
371  }
372}
373```
374
375### FormExtensionAbility.onFormLocationChanged<sup>20+</sup>
376
377onFormLocationChanged(formId: string, newFormLocation: formInfo.FormLocation): void
378
379当卡片位置发生变化时,触发该回调。
380
381**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
382
383**模型约束:** 此接口仅可在Stage模型下使用。
384
385**系统能力:** SystemCapability.Ability.Form
386
387**参数:**
388
389| 参数名 | 类型 | 必填 | 说明 |
390| -------- | -------- | -------- | -------- |
391| formId | string | 是 | 发生位置变化的卡片标识。 |
392| newFormLocation | [formInfo.FormLocation](js-apis-app-form-formInfo.md#formlocation20) | 是 | 卡片最新位置的枚举值。 |
393
394**示例:**
395
396```ts
397import { formBindingData, FormExtensionAbility, formInfo } from '@kit.FormKit';
398import { Want } from '@kit.AbilityKit';
399
400export default class EntryFormAbility extends FormExtensionAbility {
401  onAddForm(want: Want) {
402    let formData: Record<string, string | Object> = {
403      'data': 'addForm'
404    };
405    return formBindingData.createFormBindingData(formData);
406  }
407  onFormLocationChanged(formId: string, newFormLocation: formInfo.FormLocation) {
408    console.info("EntryFormAbility onFormLocationChanged current location: " + newFormLocation);
409  }
410}
411```
412
413### FormExtensionAbility.onSizeChanged<sup>20+</sup>
414
415onSizeChanged(formId: string, newDimension: formInfo.FormDimension, newRect: formInfo.Rect): void
416
417卡片大小变化时,触发回调。
418
419**模型约束:** 此接口仅可在Stage模型下使用。
420
421**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
422
423**系统能力:** SystemCapability.Ability.Form
424
425**参数:**
426
427| 参数名 | 类型   | 必填 | 说明               |
428| ------ | ------ | ---- | ------------------ |
429| formId | string | 是   | 卡片标识。 |
430| newDimension | [formInfo.FormDimension](js-apis-app-form-formInfo.md#formdimension) | 是 | 卡片尺寸,例如 Dimension_1_2,表示 1 x 2 卡片。 |
431| newRect | [formInfo.Rect](js-apis-app-form-formInfo.md#rect20) | 是 | 卡片位置信息,包括卡片左上角顶点的xy坐标和卡片的宽高。 |
432
433**示例:**
434
435```ts
436import { FormExtensionAbility, formInfo } from '@kit.FormKit';
437
438export default class MyFormExtensionAbility extends FormExtensionAbility {
439  onSizeChanged(formId: string, newDimension: formInfo.FormDimension, newRect: formInfo.Rect) {
440    console.info(`FormExtensionAbility onSizeChanged, formId: ${formId}, newDimension: ${newDimension}`);
441  }
442}
443```
444