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.keys和for..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