1e41f4b71Sopenharmony_ci# UIServiceExtensionConnectCallback 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ciUIServiceExtensionConnectCallback是UIServiceExtension连接回调接口类,提供UIServiceExtension连接回调数据能力。 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ci 6e41f4b71Sopenharmony_ci> **说明:** 7e41f4b71Sopenharmony_ci> 8e41f4b71Sopenharmony_ci> - 本模块首批接口从API version 13开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 9e41f4b71Sopenharmony_ci> - 本模块接口仅可在Stage模型下使用。 10e41f4b71Sopenharmony_ci> - 本模块接口需要在主线程中使用,不要在Worker、TaskPool等子线程中使用。 11e41f4b71Sopenharmony_ci 12e41f4b71Sopenharmony_ci## 导入模块 13e41f4b71Sopenharmony_ci 14e41f4b71Sopenharmony_ci```ts 15e41f4b71Sopenharmony_ciimport { common } from '@kit.AbilityKit'; 16e41f4b71Sopenharmony_ci``` 17e41f4b71Sopenharmony_ci 18e41f4b71Sopenharmony_ci## UIServiceExtensionConnectCallback.onData 19e41f4b71Sopenharmony_ci 20e41f4b71Sopenharmony_ci onData(data: Record<string, Object>): void 21e41f4b71Sopenharmony_ci 22e41f4b71Sopenharmony_ci接收UIServiceExtension连接的回调数据。 23e41f4b71Sopenharmony_ci 24e41f4b71Sopenharmony_ci> **说明:** 25e41f4b71Sopenharmony_ci> 26e41f4b71Sopenharmony_ci> 组件启动规则详见:[组件启动规则(Stage模型)](../../application-models/component-startup-rules.md)。 27e41f4b71Sopenharmony_ci> 28e41f4b71Sopenharmony_ci 29e41f4b71Sopenharmony_ci 30e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci**参数:** 33e41f4b71Sopenharmony_ci 34e41f4b71Sopenharmony_ci| 参数名 | 类型 | 只读 | 可选 | 说明 | 35e41f4b71Sopenharmony_ci| ------ | ---------------------- | ---- | ------------ | ------------ | 36e41f4b71Sopenharmony_ci| data | Record<string, Object> | 是 | 否 | 接收UIServiceExtension连接回调数据。 | 37e41f4b71Sopenharmony_ci 38e41f4b71Sopenharmony_ci 39e41f4b71Sopenharmony_ci**示例:** 40e41f4b71Sopenharmony_ci 41e41f4b71Sopenharmony_ci```ts 42e41f4b71Sopenharmony_ciimport { common } from '@kit.AbilityKit'; 43e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit'; 44e41f4b71Sopenharmony_ci 45e41f4b71Sopenharmony_ciconst TAG: string = '[Extension] '; 46e41f4b71Sopenharmony_ci 47e41f4b71Sopenharmony_ci@Entry 48e41f4b71Sopenharmony_ci@Component 49e41f4b71Sopenharmony_cistruct UIServiceExtensionAbility { 50e41f4b71Sopenharmony_ci comProxy: common.UIServiceProxy | null = null; 51e41f4b71Sopenharmony_ci dataCallBack: common.UIServiceExtensionConnectCallback = { 52e41f4b71Sopenharmony_ci onData: (data: Record<string, Object>) => { 53e41f4b71Sopenharmony_ci console.log(TAG + `dataCallBack received data: `, JSON.stringify(data)); 54e41f4b71Sopenharmony_ci }, 55e41f4b71Sopenharmony_ci onDisconnect: () => { 56e41f4b71Sopenharmony_ci console.log(TAG + `dataCallBack onDisconnect`); 57e41f4b71Sopenharmony_ci this.comProxy = null; 58e41f4b71Sopenharmony_ci } 59e41f4b71Sopenharmony_ci } 60e41f4b71Sopenharmony_ci 61e41f4b71Sopenharmony_ci build() { 62e41f4b71Sopenharmony_ci Scroll() { 63e41f4b71Sopenharmony_ci Column() { 64e41f4b71Sopenharmony_ci // 创建一个按钮,点击按钮后连接UIServiceExtensionAbility 65e41f4b71Sopenharmony_ci Button('connectUIServiceExtensionAbility', { type: ButtonType.Capsule, stateEffect: true }) 66e41f4b71Sopenharmony_ci .margin({ 67e41f4b71Sopenharmony_ci top: 5, 68e41f4b71Sopenharmony_ci left: 10, 69e41f4b71Sopenharmony_ci right: 10, 70e41f4b71Sopenharmony_ci bottom: 5 71e41f4b71Sopenharmony_ci }) 72e41f4b71Sopenharmony_ci .alignRules({ 73e41f4b71Sopenharmony_ci center: { anchor: '__container__', align: VerticalAlign.Center }, 74e41f4b71Sopenharmony_ci middle: { anchor: '__container__', align: HorizontalAlign.Center } 75e41f4b71Sopenharmony_ci }) 76e41f4b71Sopenharmony_ci .onClick(() => { 77e41f4b71Sopenharmony_ci this.myConnectUIServiceExtensionAbility() 78e41f4b71Sopenharmony_ci }); 79e41f4b71Sopenharmony_ci } 80e41f4b71Sopenharmony_ci .width('100%') 81e41f4b71Sopenharmony_ci } 82e41f4b71Sopenharmony_ci .height('100%') 83e41f4b71Sopenharmony_ci } 84e41f4b71Sopenharmony_ci 85e41f4b71Sopenharmony_ci myConnectUIServiceExtensionAbility() { 86e41f4b71Sopenharmony_ci // 获取上下文 87e41f4b71Sopenharmony_ci let context = getContext(this) as common.UIAbilityContext; 88e41f4b71Sopenharmony_ci let startWant: Want = { 89e41f4b71Sopenharmony_ci deviceId: '', 90e41f4b71Sopenharmony_ci bundleName: 'com.acts.myapplication', 91e41f4b71Sopenharmony_ci abilityName: 'UiServiceExtensionAbility' 92e41f4b71Sopenharmony_ci }; 93e41f4b71Sopenharmony_ci 94e41f4b71Sopenharmony_ci try { 95e41f4b71Sopenharmony_ci // 连接到UIServiceExtensionAbility 96e41f4b71Sopenharmony_ci context.connectUIServiceExtensionAbility(startWant, this.dataCallBack) 97e41f4b71Sopenharmony_ci .then((proxy: common.UIServiceProxy) => { 98e41f4b71Sopenharmony_ci console.log(TAG + `try to connectUIServiceExtensionAbility ${proxy}}`); 99e41f4b71Sopenharmony_ci this.comProxy = proxy; 100e41f4b71Sopenharmony_ci let formData: Record<string,string> = { 101e41f4b71Sopenharmony_ci 'PATH': '/tmp/aaa.jpg' 102e41f4b71Sopenharmony_ci }; 103e41f4b71Sopenharmony_ci try { 104e41f4b71Sopenharmony_ci console.log(TAG + `sendData`); 105e41f4b71Sopenharmony_ci this.comProxy.sendData(formData); 106e41f4b71Sopenharmony_ci } catch (err) { 107e41f4b71Sopenharmony_ci let code = (err as BusinessError).code; 108e41f4b71Sopenharmony_ci let message = (err as BusinessError).message; 109e41f4b71Sopenharmony_ci console.log(TAG + `sendData failed, code is ${code}, message is ${message}`); 110e41f4b71Sopenharmony_ci } 111e41f4b71Sopenharmony_ci }).catch((err: Error) => { 112e41f4b71Sopenharmony_ci let code = (err as BusinessError).code; 113e41f4b71Sopenharmony_ci let message = (err as BusinessError).message; 114e41f4b71Sopenharmony_ci console.log(TAG + `connectUIServiceExtensionAbility failed, code is ${code}, message is ${message}`); 115e41f4b71Sopenharmony_ci }); 116e41f4b71Sopenharmony_ci } catch (err) { 117e41f4b71Sopenharmony_ci let code = (err as BusinessError).code; 118e41f4b71Sopenharmony_ci let message = (err as BusinessError).message; 119e41f4b71Sopenharmony_ci console.log(TAG + `connectUIServiceExtensionAbility failed, code is ${code}, message is ${message}`); 120e41f4b71Sopenharmony_ci } 121e41f4b71Sopenharmony_ci } 122e41f4b71Sopenharmony_ci} 123e41f4b71Sopenharmony_ci``` 124e41f4b71Sopenharmony_ci 125e41f4b71Sopenharmony_ci## UIServiceExtensionConnectCallback.onDisconnect 126e41f4b71Sopenharmony_ci 127e41f4b71Sopenharmony_cionDisconnect(): void 128e41f4b71Sopenharmony_ci 129e41f4b71Sopenharmony_ci成功断开UIServiceExtension连接的回调。 130e41f4b71Sopenharmony_ci 131e41f4b71Sopenharmony_ci> **说明:** 132e41f4b71Sopenharmony_ci> 133e41f4b71Sopenharmony_ci> 组件启动规则详见:[组件启动规则(Stage模型)](../../application-models/component-startup-rules.md)。 134e41f4b71Sopenharmony_ci> 135e41f4b71Sopenharmony_ci 136e41f4b71Sopenharmony_ci 137e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 138e41f4b71Sopenharmony_ci 139e41f4b71Sopenharmony_ci**参数:** 140e41f4b71Sopenharmony_ci 141e41f4b71Sopenharmony_ci无。 142e41f4b71Sopenharmony_ci 143e41f4b71Sopenharmony_ci**示例:** 144e41f4b71Sopenharmony_ci```ts 145e41f4b71Sopenharmony_ciimport { common } from '@kit.AbilityKit'; 146e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit'; 147e41f4b71Sopenharmony_ci 148e41f4b71Sopenharmony_ciconst TAG: string = '[Extension] '; 149e41f4b71Sopenharmony_ci 150e41f4b71Sopenharmony_ci@Entry 151e41f4b71Sopenharmony_ci@Component 152e41f4b71Sopenharmony_cistruct UIServiceExtensionAbility { 153e41f4b71Sopenharmony_ci comProxy: common.UIServiceProxy | null = null; 154e41f4b71Sopenharmony_ci // 链接时的回调接口 155e41f4b71Sopenharmony_ci dataCallBack: common.UIServiceExtensionConnectCallback = { 156e41f4b71Sopenharmony_ci onData: (data: Record<string, Object>) => { 157e41f4b71Sopenharmony_ci console.log(TAG + `dataCallBack received data: `, JSON.stringify(data)); 158e41f4b71Sopenharmony_ci }, 159e41f4b71Sopenharmony_ci onDisconnect: () => { 160e41f4b71Sopenharmony_ci // 链接断链后的触发 161e41f4b71Sopenharmony_ci console.log(TAG + `dataCallBack onDisconnect`); 162e41f4b71Sopenharmony_ci this.comProxy = null; 163e41f4b71Sopenharmony_ci } 164e41f4b71Sopenharmony_ci } 165e41f4b71Sopenharmony_ci 166e41f4b71Sopenharmony_ci build() { 167e41f4b71Sopenharmony_ci Scroll() { 168e41f4b71Sopenharmony_ci Column() { 169e41f4b71Sopenharmony_ci // 创建一个按钮,点击后断开已连接的UIServiceExtensionAbility 170e41f4b71Sopenharmony_ci Button('disConnectUIServiceExtensionAbility', { type: ButtonType.Capsule, stateEffect: true }) 171e41f4b71Sopenharmony_ci .margin({ 172e41f4b71Sopenharmony_ci top: 5, 173e41f4b71Sopenharmony_ci left: 10, 174e41f4b71Sopenharmony_ci right: 10, 175e41f4b71Sopenharmony_ci bottom: 5 176e41f4b71Sopenharmony_ci }) 177e41f4b71Sopenharmony_ci .alignRules({ 178e41f4b71Sopenharmony_ci center: { anchor: '__container__', align: VerticalAlign.Center }, 179e41f4b71Sopenharmony_ci middle: { anchor: '__container__', align: HorizontalAlign.Center } 180e41f4b71Sopenharmony_ci }) 181e41f4b71Sopenharmony_ci .onClick(() => { 182e41f4b71Sopenharmony_ci this.myConnectUIServiceExtensionAbility() 183e41f4b71Sopenharmony_ci }); 184e41f4b71Sopenharmony_ci } 185e41f4b71Sopenharmony_ci .width('100%') 186e41f4b71Sopenharmony_ci } 187e41f4b71Sopenharmony_ci .height('100%') 188e41f4b71Sopenharmony_ci } 189e41f4b71Sopenharmony_ci 190e41f4b71Sopenharmony_ci myConnectUIServiceExtensionAbility() { 191e41f4b71Sopenharmony_ci // 获取上下文 192e41f4b71Sopenharmony_ci let context = getContext(this) as common.UIAbilityContext; 193e41f4b71Sopenharmony_ci // 断开链接的UIServiceExtensionAbility 194e41f4b71Sopenharmony_ci try { 195e41f4b71Sopenharmony_ci // this.comProxy在链接成功后保存 196e41f4b71Sopenharmony_ci context.disconnectUIServiceExtensionAbility(this.comProxy).then(() => { 197e41f4b71Sopenharmony_ci console.log(TAG + `disconnectUIServiceExtensionAbility success`); 198e41f4b71Sopenharmony_ci }).catch((err: Error) => { 199e41f4b71Sopenharmony_ci let code = (err as BusinessError).code; 200e41f4b71Sopenharmony_ci let message = (err as BusinessError).message; 201e41f4b71Sopenharmony_ci console.log(TAG + `disconnectUIServiceExtensionAbility failed, code is ${code}, message is ${message}`); 202e41f4b71Sopenharmony_ci }); 203e41f4b71Sopenharmony_ci } catch (err) { 204e41f4b71Sopenharmony_ci let code = (err as BusinessError).code; 205e41f4b71Sopenharmony_ci let message = (err as BusinessError).message; 206e41f4b71Sopenharmony_ci console.log(TAG + `disconnectUIServiceExtensionAbility failed, code is ${code}, message is ${message}`); 207e41f4b71Sopenharmony_ci } 208e41f4b71Sopenharmony_ci } 209e41f4b71Sopenharmony_ci} 210e41f4b71Sopenharmony_ci``` 211e41f4b71Sopenharmony_ci 212