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