1# FormExtensionContext 2 3FormExtensionContext模块是FormExtensionAbility的上下文环境,继承自ExtensionContext。 4 5FormExtensionContext模块提供FormExtensionAbility具有的接口和能力。 6 7> **说明:** 8> 9> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 10> 本模块接口仅可在Stage模型下使用。 11 12## 导入模块 13 14```ts 15import common from '@ohos.app.ability.common'; 16``` 17 18## FormExtensionContext.startAbility 19 20startAbility(want: Want, callback: AsyncCallback<void>): void 21 22拉起一个卡片所属应用的Ability。使用callback异步回调。 23 24**系统接口**:此接口为系统接口。 25 26**系统能力**:SystemCapability.Ability.Form 27 28**错误码:** 29 30| 错误码ID | 错误信息 | 31| -------- | -------- | 32| 202 | The application is not a system application. | 33| 401 | If the input parameter is not valid parameter. | 34| 16500050 | An IPC connection error happened. | 35| 16500100 | Failed to obtain the configuration information. | 36| 16500101 | The application is not a system application. | 37| 16501000 | An internal functional error occurred. | 38 39以上错误码的详细介绍请参见[卡片错误码](../errorcodes/errorcode-form.md)。 40 41**参数:** 42 43| 参数名 | 类型 | 必填 | 说明 | 44| ------| --------------------------------- | ---- | -------------------------------------- | 45| want| [Want](js-apis-app-ability-want.md) | 是 | 包含bundleName,abilityName以及用户自定参数用于拉起Ability。 | 46| callback| AsyncCallback<void> | 是 | 回调函数。当拉起一个卡片所属应用的Ability成功,err为undefined,否则为错误对象。 | 47 48**示例:** 49 50```ts 51import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility'; 52import Want from '@ohos.app.ability.Want'; 53import Base from '@ohos.base'; 54 55export default class MyFormExtensionAbility extends FormExtensionAbility { 56 onFormEvent(formId: string, message: string) { 57 // 当触发卡片message事件时,执行startAbility 58 console.log(`FormExtensionAbility onFormEvent, formId: ${formId}, message:${message}`); 59 let want: Want = { 60 deviceId: '', 61 bundleName: 'com.example.formstartability', 62 abilityName: 'EntryAbility', 63 parameters: { 64 'message': message 65 } 66 }; 67 this.context.startAbility(want, (error: Base.BusinessError) => { 68 if (error) { 69 console.error(`FormExtensionContext startAbility, error:${JSON.stringify(error)}`); 70 } else { 71 console.log('FormExtensionContext startAbility success'); 72 } 73 }); 74 } 75}; 76``` 77 78## FormExtensionContext.startAbility 79 80startAbility(want: Want): Promise<void> 81 82拉起一个卡片所属应用的Ability。使用Promise异步回调。 83 84**系统接口**:此接口为系统接口。 85 86**系统能力**:SystemCapability.Ability.Form 87 88**参数:** 89 90| 参数名 | 类型 | 必填 | 说明 | 91| ------| --------------------------------- | ---- | -------------------------------------- | 92| want| [Want](js-apis-app-ability-want.md) | 是 | 包含bundleName,abilityName以及用户自定参数用于拉起Ability。 | 93 94**返回值:** 95 96| 类型 | 说明 | 97| ------------ | ---------------------------------- | 98| Promise<void> | 无返回结果的Promise对象。 | 99 100**错误码:** 101 102| 错误码ID | 错误信息 | 103| -------- | -------- | 104| 202 | The application is not a system application. | 105| 401 | If the input parameter is not valid parameter. | 106| 16500050 | An IPC connection error happened. | 107| 16500100 | Failed to obtain the configuration information. | 108| 16500101 | The application is not a system application. | 109| 16501000 | An internal functional error occurred. | 110 111以上错误码的详细介绍请参见[卡片错误码](../errorcodes/errorcode-form.md)。 112 113**示例:** 114 115```ts 116import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility'; 117import Want from '@ohos.app.ability.Want'; 118import Base from '@ohos.base'; 119 120export default class MyFormExtensionAbility extends FormExtensionAbility { 121 onFormEvent(formId: string, message: string) { 122 // 当触发卡片message事件时,执行startAbility 123 console.log(`FormExtensionAbility onFormEvent, formId:${formId}, message:${message}`); 124 let want: Want = { 125 deviceId: '', 126 bundleName: 'com.example.formstartability', 127 abilityName: 'EntryAbility', 128 parameters: { 129 'message': message 130 } 131 }; 132 this.context.startAbility(want).then(() => { 133 console.info('StartAbility Success'); 134 }).catch((error: Base.BusinessError) => { 135 console.error('StartAbility failed'); 136 }); 137 } 138}; 139``` 140 141## FormExtensionContext.connectServiceExtensionAbility<sup>10+</sup> 142 143connectServiceExtensionAbility(want: Want, options: ConnectOptions): number; 144 145将一个Ability与服务类型的Ability绑定。 146 147**系统能力**:SystemCapability.Ability.Form 148 149**系统API**: 此接口为系统接口,三方应用不支持调用。 150 151**参数:** 152 153| 参数名 | 类型 | 必填 | 说明 | 154| -------- | -------- | -------- | -------- | 155| want | [Want](js-apis-app-ability-want.md) | 是 | Want类型参数,传入需要启动的ability的信息,如Ability名称,Bundle名称等。 | 156| options | [ConnectOptions](js-apis-inner-ability-connectOptions.md) | 是 | ConnectOptions类型的回调函数,返回服务连接成功、断开或连接失败后的信息。 | 157 158**返回值:** 159 160| 类型 | 说明 | 161| -------- | -------- | 162| number | 返回一个connectId,后续根据此connectId断开连接。 | 163 164**错误码:** 165 166| 错误码ID | 错误信息 | 167| ------- | -------------------------------- | 168| 16000001 | The specified ability does not exist. | 169| 16000002 | Incorrect ability type. | 170| 16000004 | Can not start invisible component. | 171| 16000005 | The specified process does not have the permission. | 172| 16000006 | Cross-user operations are not allowed. | 173| 16000008 | The crowdtesting application expires. | 174| 16000053 | The ability is not on the top of the UI. | 175| 16000055 | Installation-free timed out. | 176| 16000011 | The context does not exist. | 177| 16000050 | Internal error. | 178 179以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。 180 181**示例:** 182 183```ts 184import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility'; 185import Want from '@ohos.app.ability.Want'; 186import rpc from '@ohos.rpc'; 187import common from '@ohos.app.ability.common'; 188 189let commRemote: rpc.IRemoteObject | null = null; 190export default class MyFormExtensionAbility extends FormExtensionAbility { 191 onFormEvent(formId: string, message: string) { 192 // 当触发卡片message事件时,执行connectServiceExtensionAbility 193 console.log(`FormExtensionAbility onFormEvent, formId:${formId}, message:${message}`); 194 let want: Want = { 195 deviceId: '', 196 bundleName: 'com.example.formstartability', 197 abilityName: 'EntryAbility', 198 parameters: { 199 'message': message 200 } 201 }; 202 let options: common.ConnectOptions = { 203 onConnect(elementName, remote) { 204 commRemote = remote; // remote 用于与ServiceExtensionAbility进行通信 205 console.log('----------- onConnect -----------'); 206 }, 207 onDisconnect(elementName) { console.log('----------- onDisconnect -----------') }, 208 onFailed(code) { console.error('----------- onFailed -----------') } 209 }; 210 211 let connection: number | null = null; 212 try { 213 connection = this.context.connectServiceExtensionAbility(want, options); 214 } catch (paramError) { 215 // 处理入参错误异常 216 console.error(`error.code: ${(paramError as Base.BusinessError).code}, error.message: ${(paramError as Base.BusinessError).message}`); 217 } 218 } 219}; 220``` 221 222## FormExtensionContext.disconnectServiceExtensionAbility<sup>10+</sup> 223 224disconnectServiceExtensionAbility(connection: number, callback:AsyncCallback<void>): void; 225 226将一个Ability与绑定的服务类型的Ability解绑,断开连接之后需要将连接成功时返回的remote对象置空。 227 228**系统能力**:SystemCapability.Ability.Form 229 230**系统API**: 此接口为系统接口,三方应用不支持调用。 231 232**参数:** 233 234| 参数名 | 类型 | 必填 | 说明 | 235| -------- | -------- | -------- | -------- | 236| connection | number | 是 | 在connectServiceExtensionAbility中返回的number。 | 237| callback | AsyncCallback<void> | 是 | 回调函数,返回接口调用是否成功的结果。 | 238 239**错误码:** 240 241| 错误码ID | 错误信息 | 242| ------- | -------------------------------- | 243| 16000011 | The context does not exist. | 244| 16000050 | Internal error. | 245 246以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。 247 248**示例:** 249 250```ts 251import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility'; 252import rpc from '@ohos.rpc'; 253import common from '@ohos.app.ability.common'; 254import Base from '@ohos.base'; 255 256// commRemote为onConnect回调内返回的remote对象,此处定义为null无任何实际意义,仅作示例 257let commRemote: rpc.IRemoteObject | null = null; 258export default class MyFormExtensionAbility extends FormExtensionAbility { 259 onFormEvent(formId: string, message: string) { 260 // 实际使用时,connection为connectServiceExtensionAbility中的返回值,此处定义为1无任何实际意义,仅作示例 261 let connection: number = 1; 262 263 try { 264 this.context.disconnectServiceExtensionAbility(connection, (error: Base.BusinessError) => { 265 commRemote = null; 266 if (error.code) { 267 // 处理业务逻辑错误 268 console.error( 269 `disconnectServiceExtensionAbility failed, error.code: ${error.code}, error.message: ${error.message}`); 270 return; 271 } 272 // 执行正常业务 273 console.log('disconnectServiceExtensionAbility succeed'); 274 }); 275 } catch (paramError) { 276 commRemote = null; 277 // 处理入参错误异常 278 console.error(`error.code: ${(paramError as Base.BusinessError).code}, error.message: ${(paramError as Base.BusinessError).message}`); 279 } 280 } 281}; 282``` 283 284## FormExtensionContext.disconnectServiceExtensionAbility<sup>10+</sup> 285 286disconnectServiceExtensionAbility(connection: number): Promise<void>; 287 288将一个Ability与绑定的服务类型的Ability解绑,断开连接之后需要将连接成功时返回的remote对象置空(Promise形式返回结果)。 289 290**系统能力**:SystemCapability.Ability.Form 291 292**系统API**: 此接口为系统接口,三方应用不支持调用。 293 294**参数:** 295 296| 参数名 | 类型 | 必填 | 说明 | 297| -------- | -------- | -------- | -------- | 298| connection | number | 是 | 在connectServiceExtensionAbility中返回的number。 | 299 300**返回值:** 301 302| 类型 | 说明 | 303| -------- | -------- | 304| Promise<void> | 返回一个Promise,包含接口的结果。 | 305 306**错误码:** 307 308| 错误码ID | 错误信息 | 309| ------- | -------------------------------- | 310| 16000011 | The context does not exist. | 311| 16000050 | Internal error. | 312 313以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。 314 315**示例:** 316 317```ts 318import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility'; 319import rpc from '@ohos.rpc'; 320import common from '@ohos.app.ability.common'; 321import Base from '@ohos.base'; 322 323// commRemote为onConnect回调内返回的remote对象,此处定义为null无任何实际意义,仅作示例 324let commRemote: rpc.IRemoteObject | null = null; 325export default class MyFormExtensionAbility extends FormExtensionAbility { 326 onFormEvent(formId: string, message: string) { 327 // 实际使用时,connection为connectServiceExtensionAbility中的返回值,此处定义为1无任何实际意义,仅作示例 328 let connection: number = 1; 329 330 try { 331 this.context.disconnectServiceExtensionAbility(connection) 332 .then(() => { 333 commRemote = null; 334 // 执行正常业务 335 console.log('disconnectServiceExtensionAbility succeed'); 336 }) 337 .catch((error: Base.BusinessError) => { 338 commRemote = null; 339 // 处理业务逻辑错误 340 console.error( 341 `disconnectServiceExtensionAbility failed, error.code: ${error.code}, error.message: ${error.message}`); 342 }); 343 } catch (paramError) { 344 commRemote = null; 345 // 处理入参错误异常 346 console.error(`error.code: ${(paramError as Base.BusinessError).code}, error.message: ${(paramError as Base.BusinessError).message}`); 347 } 348 } 349}; 350``` 351