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