1# UIServiceProxy
2
3UIServiceProxy提供代理能力,可以从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## UIServiceProxy.sendData
19
20sendData(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以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。
42
43| 错误码ID | 错误信息                     |
44| -------- | ----------------------------|
45| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
46| 16000050 | Internal error.             |
47
48**示例:**
49
50```ts
51import { common, Want } from '@kit.AbilityKit';
52import { BusinessError } from '@kit.BasicServicesKit';
53
54const TAG: string = '[Extension] ';
55
56@Entry
57@Component
58struct UIServiceExtensionAbility {
59  comProxy: common.UIServiceProxy | null = null;
60  dataCallBack: common.UIServiceExtensionConnectCallback = {
61    onData: (data: Record<string, Object>) => {
62      console.log(TAG + `dataCallBack received data: `, JSON.stringify(data));
63    },
64    onDisconnect: () => {
65      console.log(TAG + `dataCallBack onDisconnect`);
66      this.comProxy = null;
67    }
68  }
69
70  build() {
71    Scroll() {
72      Column() {
73        // 创建一个连接UIServiceExtension的按钮
74        Button('connectUIServiceExtensionAbility', { type: ButtonType.Capsule, stateEffect: true })
75          .margin({
76            top: 5,
77            left: 10,
78            right: 10,
79            bottom: 5
80          })
81          .alignRules({
82            center: { anchor: '__container__', align: VerticalAlign.Center },
83            middle: { anchor: '__container__', align: HorizontalAlign.Center }
84          })
85          .onClick(() => {
86            this.myConnectUIServiceExtensionAbility()
87          });
88      }
89      .width('100%')
90    }
91    .height('100%')
92  }
93
94  // 自定义连接UIServiceExtension的函数
95  myConnectUIServiceExtensionAbility() {
96    let context = getContext(this) as common.UIAbilityContext;
97    let startWant: Want = {
98      deviceId: '',
99      bundleName: 'com.acts.myapplication',
100      abilityName: 'UiServiceExtensionAbility'
101    };
102
103    try {
104      // 连接UIServiceExtension
105      context.connectUIServiceExtensionAbility(startWant, this.dataCallBack)
106        .then((proxy: common.UIServiceProxy) => {
107          console.log(TAG + `try to connectUIServiceExtensionAbility ${proxy}}`);
108          this.comProxy = proxy;
109          let formData: Record<string,string> = {
110            'PATH': '/tmp/aaa.jpg'
111          };
112          try {
113            console.log(TAG + `sendData`);
114            // 给UIServiceExtension发送数据
115            this.comProxy.sendData(formData);
116          } catch (err) {
117            let code = (err as BusinessError).code;
118            let message = (err as BusinessError).message;
119            console.log(TAG + `sendData failed, code is ${code}, message is ${message}`);
120          }
121        }).catch((err: Error) => {
122        let code = (err as BusinessError).code;
123        let message = (err as BusinessError).message;
124        console.log(TAG + `connectUIServiceExtensionAbility failed, code is ${code}, message is ${message}`);
125      });
126    } catch (err) {
127      let code = (err as BusinessError).code;
128      let message = (err as BusinessError).message;
129      console.log(TAG + `connectUIServiceExtensionAbility failed, code is ${code}, message is ${message}`);
130    }
131  }
132}
133```
134
135