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