• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.app.ability.UIExtensionContentSession (UIExtensionAbility界面操作类)
2
3<!--Kit: Ability Kit-->
4<!--Subsystem: Ability-->
5<!--Owner: @zhangyafei-echo; @xuzhihao666-->
6<!--Designer: @zhangyafei-echo-->
7<!--Tester: @lixueqing513-->
8<!--Adviser: @huipeizi-->
9
10UIExtensionContentSession是[UIExtensionAbility](js-apis-app-ability-uiExtensionAbility.md)组件的界面操作类,提供页面加载、设置宿主应用(UIExtensionAbility组件的拉起方)窗口隐私模式等功能。当宿主应用拉起指定的UIExtensionAbility组件时,系统创建UIExtensionContentSession对象,并通过[onSessionCreate](js-apis-app-ability-uiExtensionAbility.md#onsessioncreate)回调传递给开发者。一个UIExtensionAbility组件对应一个UIExtensionContentSession对象,每个UIExtensionAbility组件的UIExtensionContentSession对象之间互不影响。
11
12> **说明:**
13>
14> 本模块首批接口从API version 10 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
15>
16> 本模块接口仅可在Stage模型下使用。
17
18## 导入模块
19
20```ts
21import { UIExtensionContentSession } from '@kit.AbilityKit';
22```
23
24## UIExtensionContentSession
25
26UIExtensionAbility组件的界面操作类,提供页面加载、设置宿主应用窗口隐私模式等功能。
27
28### loadContent
29
30loadContent(path: string, storage?: LocalStorage): void
31
32为[UIExtensionAbility](./js-apis-app-ability-uiExtensionAbility.md)组件加载页面,支持通过[LocalStorage](../../ui/state-management/arkts-localstorage.md)传递状态属性给被加载的页面。该接口用于开发者在UIExtensionAbility组件的[onSessionCreate](./js-apis-app-ability-uiExtensionAbility.md#onsessioncreate)生命周期中加载页面。
33
34**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
35
36**参数:**
37
38| 参数名 | 类型 | 必填 | 说明 |
39| -------- | -------- | -------- | -------- |
40| path | string | 是 | 要加载的页面所在的路径,该路径通过[module.json5配置文件](../../quick-start/module-configuration-file.md)中的[pages标签](../../quick-start/module-configuration-file.md#pages标签)配置。 |
41| storage | [LocalStorage](../../ui/state-management/arkts-localstorage.md) | 否 | 页面级UI状态存储单元,开发者可通过该参数为加载的页面传递状态属性。 |
42
43**错误码:**
44
45以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。
46
47| 错误码ID | 错误信息 |
48| -------- | -------- |
49| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
50| 16000050 | Internal error. |
51
52**示例:**
53
54```ts
55// UIExtensionAbility组件不支持三方应用直接继承,故以派生类ShareExtensionAbility举例说明。
56import { UIExtensionContentSession, ShareExtensionAbility, Want } from '@kit.AbilityKit';
57import { BusinessError } from '@kit.BasicServicesKit';
58
59export default class ShareExtAbility extends ShareExtensionAbility {
60  // ...
61
62  onSessionCreate(want: Want, session: UIExtensionContentSession): void {
63    try {
64      let storage: LocalStorage = new LocalStorage();
65      storage.setOrCreate('session', session);
66      session.loadContent('pages/Extension', storage);
67    } catch (error) {
68      let code = (error as BusinessError).code;
69      let message = (error as BusinessError).message;
70      console.error(`Failed to load content, code: ${code}, msg: ${message}`);
71    }
72  }
73
74  // ...
75}
76```
77
78### loadContentByName<sup>18+</sup>
79
80loadContentByName(name: string, storage?: LocalStorage): void
81
82为[UIExtensionAbility](./js-apis-app-ability-uiExtensionAbility.md)组件加载[命名路由](../../ui/arkts-routing.md#命名路由)页面,支持通过[LocalStorage](../../ui/state-management/arkts-localstorage.md)传递状态属性给被加载的页面。该接口用于开发者在UIExtensionAbility组件的[onSessionCreate](./js-apis-app-ability-uiExtensionAbility.md#onsessioncreate)生命周期中加载命名路由页面。
83
84**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
85
86**参数:**
87
88| 参数名 | 类型 | 必填 | 说明 |
89| ------ | ------ | ------ | ------ |
90| name | string | 是 | 命名路由页面的名称。 |
91| storage | [LocalStorage](../../ui/state-management/arkts-localstorage.md) | 否 | 页面级UI状态存储单元,开发者可通过该参数为加载的页面传递状态属性。 |
92
93**错误码:**
94
95以下错误码详细介绍请参考[元能力子系统错误码](errorcode-ability.md)。
96
97| 错误码ID | 错误信息 |
98| ------ | ------ |
99| 16000050 | Internal error. |
100
101**示例:**
102
103UIExtensionAbility组件的实现:
104```ts
105// UIExtensionAbility组件不支持三方应用直接继承,故以派生类ShareExtensionAbility举例说明。
106import { UIExtensionContentSession, ShareExtensionAbility, Want } from '@kit.AbilityKit';
107import { BusinessError } from '@kit.BasicServicesKit';
108import './pages/UIExtensionPage'; // 导入命名路由页面,示例代码以“./pages/UIExtensionPage.ets”文件为例,在实际代码开发过程中修改为真实路径和文件名称。
109
110export default class ShareExtAbility extends ShareExtensionAbility {
111  // 其他生命周期和实现
112
113  onSessionCreate(want: Want, session: UIExtensionContentSession): void {
114    let storage: LocalStorage = new LocalStorage();
115    storage.setOrCreate('session', session);
116
117    let name: string = 'UIExtPage'; // 命名路由页面的名字。
118    try {
119      session.loadContentByName(name, storage);
120    } catch (error) {
121      let code = (error as BusinessError).code;
122      let message = (error as BusinessError).message;
123      console.error(`Failed to load content by name ${name}, code: ${code}, msg: ${message}`);
124    }
125  }
126
127  // 其他生命周期和实现
128}
129```
130
131UIExtensionAbility组件加载的命名路由页面的实现:
132```ts
133// “./pages/UIExtensionPage.ets”文件的实现。
134import { UIExtensionContentSession } from '@kit.AbilityKit';
135
136@Entry({ routeName: 'UIExtPage' }) // 通过“routeName”定义命名路由页面的名字。
137@Component
138struct UIExtensionPage {
139  @State message: string = 'Hello world';
140  storage: LocalStorage | undefined = this.getUIContext().getSharedLocalStorage();
141  private session: UIExtensionContentSession | undefined = this.storage?.get<UIExtensionContentSession>('session');
142
143  build() {
144    Row() {
145      Column() {
146        Text(this.message)
147          .fontSize(20)
148          .fontWeight(FontWeight.Bold)
149      }
150      .width('100%')
151    }
152    .height('100%')
153  }
154}
155```
156
157### terminateSelf
158
159terminateSelf(callback: AsyncCallback&lt;void&gt;): void
160
161销毁UIExtensionAbility组件自身,同时关闭对应的宿主应用窗口界面。使用callback异步回调。
162
163**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
164
165**参数:**
166
167| 参数名 | 类型 | 必填 | 说明 |
168| -------- | -------- | -------- | -------- |
169| callback | AsyncCallback&lt;void&gt; | 是 | 回调函数。当接口调用成功,err为undefined,否则为错误对象。 |
170
171**错误码:**
172
173以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)。
174
175| 错误码ID | 错误信息 |
176| ------- | -------------------------------- |
177| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
178
179**示例:**
180
181```ts
182import { UIExtensionContentSession } from '@kit.AbilityKit';
183import { BusinessError } from '@kit.BasicServicesKit';
184
185@Entry()
186@Component
187struct Index {
188  storage: LocalStorage | undefined = this.getUIContext().getSharedLocalStorage();
189  private session: UIExtensionContentSession | undefined =
190    this.storage?.get<UIExtensionContentSession>('session');
191
192  build() {
193    RelativeContainer() {
194      Button('TerminateSelf')
195        .onClick(() => {
196          this.session?.terminateSelf((err: BusinessError) => {
197            if (err) {
198              console.error(`Failed to terminate self, code: ${err.code}, msg: ${err.message}`);
199              return;
200            }
201            console.info(`Succeeded in terminating self.`);
202          });
203
204          this.storage?.clear();
205        })
206    }
207    .height('100%')
208    .width('100%')
209  }
210}
211```
212
213### terminateSelf
214
215terminateSelf(): Promise&lt;void&gt;
216
217销毁UIExtensionAbility组件自身,同时关闭对应的宿主应用窗口界面。使用Promise异步回调。
218
219**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
220
221**返回值:**
222
223| 类型 | 说明 |
224| -------- | -------- |
225| Promise&lt;void&gt; | Promise对象,无返回结果。 |
226
227**示例:**
228
229```ts
230import { UIExtensionContentSession } from '@kit.AbilityKit';
231import { BusinessError } from '@kit.BasicServicesKit';
232
233@Entry()
234@Component
235struct Index {
236  storage: LocalStorage | undefined = this.getUIContext().getSharedLocalStorage();
237  private session: UIExtensionContentSession | undefined =
238    this.storage?.get<UIExtensionContentSession>('session');
239
240  build() {
241    RelativeContainer() {
242      Button('TerminateSelf')
243        .onClick(() => {
244          this.session?.terminateSelf()
245            .then(() => {
246              console.info(`Succeeded in terminating self.`);
247            })
248            .catch((err: BusinessError) => {
249              console.error(`Failed to terminate self, code: ${err.code}, msg: ${err.message}`);
250            });
251
252          this.storage?.clear();
253        })
254    }
255    .height('100%')
256    .width('100%')
257  }
258}
259```
260
261### terminateSelfWithResult
262
263terminateSelfWithResult(parameter: AbilityResult, callback: AsyncCallback&lt;void&gt;): void
264
265销毁UIExtensionAbility组件自身,关闭对应的宿主应用窗口界面,并将结果返回给宿主应用。使用callback异步回调。
266
267**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
268
269**参数:**
270
271| 参数名 | 类型 | 必填 | 说明 |
272| -------- | -------- | -------- | -------- |
273| parameter | [AbilityResult](js-apis-inner-ability-abilityResult.md) | 是 | 返回给宿主应用的信息。 |
274| callback | AsyncCallback&lt;void&gt; | 是 | 回调函数。当接口调用成功,err为undefined,否则为错误对象。 |
275
276**错误码:**
277
278以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)。
279
280| 错误码ID | 错误信息 |
281| ------- | -------------------------------- |
282| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
283
284**示例:**
285
286```ts
287import { UIExtensionContentSession, common } from '@kit.AbilityKit';
288import { BusinessError } from '@kit.BasicServicesKit';
289
290@Entry()
291@Component
292struct Index {
293  storage: LocalStorage | undefined = this.getUIContext().getSharedLocalStorage();
294  private session: UIExtensionContentSession | undefined =
295    this.storage?.get<UIExtensionContentSession>('session');
296
297  build() {
298    RelativeContainer() {
299      Button('TerminateSelfWithResult')
300        .onClick(() => {
301          let abilityResult: common.AbilityResult = {
302            resultCode: 0,
303            want: {
304              bundleName: 'com.ohos.uiextensioncontentsession',
305              parameters: {
306                'result': 123456
307              }
308            }
309          };
310
311          this.session?.terminateSelfWithResult(abilityResult, (err: BusinessError) => {
312            if (err) {
313              console.error(`Failed to terminate self with result, code: ${err.code}, msg: ${err.message}`);
314              return;
315            }
316            console.info(`Succeeded in terminating self with result.`);
317          });
318
319          this.storage?.clear();
320        })
321    }
322    .height('100%')
323    .width('100%')
324  }
325}
326```
327
328### terminateSelfWithResult
329
330terminateSelfWithResult(parameter: AbilityResult): Promise&lt;void&gt;
331
332销毁UIExtensionAbility组件自身,关闭对应的宿主应用窗口界面,并将结果返回给宿主应用。使用Promise异步回调。
333
334**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
335
336**参数:**
337
338| 参数名 | 类型 | 必填 | 说明 |
339| -------- | -------- | -------- | -------- |
340| parameter | [AbilityResult](js-apis-inner-ability-abilityResult.md) | 是 | 返回给宿主应用的信息。 |
341
342**返回值:**
343
344| 类型 | 说明 |
345| -------- | -------- |
346| Promise&lt;void&gt; | Promise对象,无返回结果。 |
347
348**错误码:**
349
350以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)。
351
352| 错误码ID | 错误信息 |
353| ------- | -------- |
354| 401  | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
355
356**示例:**
357
358```ts
359import { UIExtensionContentSession, common } from '@kit.AbilityKit';
360import { BusinessError } from '@kit.BasicServicesKit';
361
362@Entry()
363@Component
364struct Index {
365  storage: LocalStorage | undefined = this.getUIContext().getSharedLocalStorage();
366  private session: UIExtensionContentSession | undefined =
367    this.storage?.get<UIExtensionContentSession>('session');
368
369  build() {
370    RelativeContainer() {
371      Button('TerminateSelfWithResult')
372        .onClick(() => {
373          let abilityResult: common.AbilityResult = {
374            resultCode: 0,
375            want: {
376              bundleName: 'com.ohos.uiextensioncontentsession',
377              parameters: {
378                'result': 123456
379              }
380            }
381          };
382
383          this.session?.terminateSelfWithResult(abilityResult)
384            .then(() => {
385              console.info(`Succeeded in terminating self with result.`);
386            })
387            .catch((err: BusinessError) => {
388              console.error(`Failed to terminate self with result, code: ${err.code}, msg: ${err.message}`);
389            });
390
391          this.storage?.clear();
392        })
393    }
394    .height('100%')
395    .width('100%')
396  }
397}
398```
399
400### setWindowPrivacyMode
401
402setWindowPrivacyMode(isPrivacyMode: boolean): Promise&lt;void&gt;
403
404设置宿主应用窗口的隐私模式开启或关闭。设置为隐私模式的窗口,窗口内容将无法被截屏或录屏。使用Promise异步回调。
405
406**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
407
408**需要权限**:ohos.permission.PRIVACY_WINDOW
409
410**参数:**
411
412| 参数名 | 类型 | 必填 | 说明 |
413| -------- | -------- | -------- | -------- |
414| isPrivacyMode | boolean | 是 | 表示是否开启隐私模式。true表示开启;false表示关闭。 |
415
416**返回值:**
417
418| 类型 | 说明 |
419| -------- | -------- |
420| Promise&lt;void&gt; | Promise对象,无返回结果。 |
421
422**错误码:**
423
424以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)。
425
426| 错误码ID | 错误信息 |
427| -------- | -------- |
428| 201 | The application does not have permission to call the interface. |
429| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
430
431**示例:**
432
433```ts
434// UIExtensionAbility组件不支持三方应用直接继承,故以派生类ShareExtensionAbility举例说明。
435import { UIExtensionContentSession, ShareExtensionAbility, Want } from '@kit.AbilityKit';
436import { BusinessError } from '@kit.BasicServicesKit';
437
438export default class ShareExtAbility extends ShareExtensionAbility {
439  // ...
440
441  onSessionCreate(want: Want, session: UIExtensionContentSession): void {
442    let isPrivacyMode: boolean = true;
443    try {
444      session.setWindowPrivacyMode(isPrivacyMode)
445        .then(() => {
446          console.info(`Succeeded in setting window to privacy mode.`);
447        })
448        .catch((err: BusinessError) => {
449          console.error(`Failed to set window to privacy mode, code: ${err.code}, msg: ${err.message}`);
450        });
451    } catch (e) {
452      let code = (e as BusinessError).code;
453      let msg = (e as BusinessError).message;
454      console.error(`Failed to set window to privacy mode, code: ${code}, msg: ${msg}`);
455    }
456  }
457
458  // ...
459}
460```
461
462### setWindowPrivacyMode
463
464setWindowPrivacyMode(isPrivacyMode: boolean, callback: AsyncCallback&lt;void&gt;): void
465
466设置宿主应用窗口的隐私模式开启或关闭。设置为隐私模式的窗口,窗口内容将无法被截屏或录屏。使用callback异步回调。
467
468**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
469
470**需要权限**:ohos.permission.PRIVACY_WINDOW
471
472**参数:**
473
474| 参数名 | 类型 | 必填 | 说明 |
475| -------- | -------- | -------- | -------- |
476| isPrivacyMode | boolean | 是 | 表示是否开启隐私模式。true表示开启;false表示关闭。 |
477| callback | AsyncCallback&lt;void&gt; | 是 | 回调函数。当设置成功,err为undefined,否则为错误对象。 |
478
479**错误码:**
480
481以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)。
482
483| 错误码ID | 错误信息 |
484| -------- | -------- |
485| 201 | The application does not have permission to call the interface. |
486| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
487
488**示例:**
489
490```ts
491// UIExtensionAbility组件不支持三方应用直接继承,故以派生类ShareExtensionAbility举例说明。
492import { UIExtensionContentSession, ShareExtensionAbility, Want } from '@kit.AbilityKit';
493import { BusinessError } from '@kit.BasicServicesKit';
494
495export default class ShareExtAbility extends ShareExtensionAbility {
496  // ...
497
498  onSessionCreate(want: Want, session: UIExtensionContentSession): void {
499    let isPrivacyMode: boolean = true;
500    try {
501      session.setWindowPrivacyMode(isPrivacyMode, (err: BusinessError) => {
502        if (err) {
503          console.error(`Failed to set window to privacy mode, code: ${err.code}, msg: ${err.message}`);
504          return;
505        }
506        console.info(`Succeeded in setting window to privacy mode.`);
507      });
508    } catch (e) {
509      let code = (e as BusinessError).code;
510      let msg = (e as BusinessError).message;
511      console.error(`Failed to set window to privacy mode, code: ${code}, msg: ${msg}`);
512    }
513  }
514
515  // ...
516}
517```
518
519### startAbilityByType<sup>11+</sup>
520
521startAbilityByType(type: string, wantParam: Record<string, Object>,
522    abilityStartCallback: AbilityStartCallback, callback: AsyncCallback\<void>): void
523
524通过type隐式启动UIExtensionAbility。使用callback异步回调。仅支持处于前台的应用调用。
525
526**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
527
528**参数:**
529
530| 参数名 | 类型 | 必填 | 说明 |
531| -------- | -------- | -------- | -------- |
532| type | string | 是 | UIExtensionAbility组件类型,取值详见[通过startAbilityByType接口拉起垂类面板](../../application-models/start-intent-panel.md#匹配规则)。 |
533| wantParam | Record<string, Object> | 是 | 表示启动UIExtensionAbility组件时传递的参数。 |
534| abilityStartCallback | [AbilityStartCallback](js-apis-inner-application-abilityStartCallback.md) | 是 | 表示启动UIExtensionAbility组件的执行结果。 |
535| callback | AsyncCallback\<void> | 是 | 回调函数。当接口调用成功,err为undefined,否则为错误对象。 |
536
537**错误码:**
538
539以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。
540
541| 错误码ID | 错误信息 |
542| -------- | -------- |
543| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
544| 16000050 | Internal error. |
545
546**示例:**
547
548```ts
549// UIExtensionAbility组件不支持三方应用直接继承,故以派生类ShareExtensionAbility举例说明。
550import { UIExtensionContentSession, ShareExtensionAbility, Want, common } from '@kit.AbilityKit';
551import { BusinessError } from '@kit.BasicServicesKit';
552
553export default class ShareExtAbility extends ShareExtensionAbility {
554  // ...
555
556  onSessionCreate(want: Want, session: UIExtensionContentSession): void {
557    let wantParams: Record<string, Object> = {
558      'sceneType': 1
559    };
560    let abilityStartCallback: common.AbilityStartCallback = {
561      onError: (code: number, name: string, message: string) => {
562        console.error(`onError, code: ${code}, name: ${name}, msg: ${message}`);
563      },
564      onResult: (result: common.AbilityResult) => {
565        console.info(`onResult, result: ${JSON.stringify(result)}`);
566      }
567    };
568
569    session.startAbilityByType('navigation', wantParams, abilityStartCallback, (err: BusinessError) => {
570      if (err) {
571        console.error(`Failed to startAbilityByType, code: ${err.code}, msg: ${err.message}`);
572        return;
573      }
574      console.info(`Succeeded in startAbilityByType`);
575    });
576  }
577
578  // ...
579}
580```
581
582### startAbilityByType<sup>11+</sup>
583
584startAbilityByType(type: string, wantParam: Record<string, Object>,
585    abilityStartCallback: AbilityStartCallback): Promise\<void>
586
587通过type隐式启动UIExtensionAbility组件。使用Promise异步回调。仅支持处于前台的应用调用。
588
589**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
590
591**参数:**
592
593| 参数名 | 类型 | 必填 | 说明 |
594| -------- | -------- | -------- | -------- |
595| type | string | 是 | UIExtensionAbility组件类型,取值详见[通过startAbilityByType接口拉起垂类面板](../../application-models/start-intent-panel.md#匹配规则)。 |
596| wantParam | Record<string, Object> | 是 | 表示启动UIExtensionAbility组件时传递的参数。 |
597| abilityStartCallback | [AbilityStartCallback](js-apis-inner-application-abilityStartCallback.md) | 是 | 表示启动UIExtensionAbility组件的执行结果。 |
598
599**返回值:**
600
601| 类型 | 说明 |
602| -------- | -------- |
603| Promise\<void> | Promise对象,无返回结果。 |
604
605**错误码:**
606
607以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。
608
609| 错误码ID | 错误信息 |
610| -------- | -------- |
611| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
612| 16000050 | Internal error. |
613
614**示例:**
615
616```ts
617// UIExtensionAbility组件不支持三方应用直接继承,故以派生类ShareExtensionAbility举例说明。
618import { UIExtensionContentSession, ShareExtensionAbility, Want, common } from '@kit.AbilityKit';
619import { BusinessError } from '@kit.BasicServicesKit';
620
621export default class ShareExtAbility extends ShareExtensionAbility {
622  // ...
623
624  onSessionCreate(want: Want, session: UIExtensionContentSession): void {
625    let wantParams: Record<string, Object> = {
626      'sceneType': 1
627    };
628    let abilityStartCallback: common.AbilityStartCallback = {
629      onError: (code: number, name: string, message: string) => {
630        console.error(`onError, code: ${code}, name: ${name}, msg: ${message}`);
631      },
632      onResult: (result: common.AbilityResult) => {
633        console.info(`onResult, result: ${JSON.stringify(result)}`);
634      }
635    };
636
637    session.startAbilityByType('test', wantParams, abilityStartCallback)
638      .then(() => {
639        console.info(`Succeeded in startAbilityByType`);
640      })
641      .catch((err: BusinessError) => {
642        console.error(`Failed to startAbilityByType, code: ${err.code}, msg: ${err.message}`);
643      });
644  }
645
646  // ...
647}
648```
649
650### getUIExtensionWindowProxy<sup>12+</sup>
651
652getUIExtensionWindowProxy(): uiExtension.WindowProxy
653
654获取UIExtension窗口代理。
655
656**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
657
658**返回值:**
659
660| 类型 | 说明 |
661| -------- | -------- |
662| [uiExtension.WindowProxy](../apis-arkui/js-apis-arkui-uiExtension.md#windowproxy) | UIExtensionAbility组件的宿主应用窗口代理。 |
663
664**错误码:**
665
666以下错误码详细介绍请参考[元能力子系统错误码](errorcode-ability.md)。
667
668| 错误码ID | 错误信息 |
669| -------- | -------- |
670| 16000050 | Internal error. |
671
672**示例:**
673
674```ts
675// Index.ets
676import { UIExtensionContentSession } from '@kit.AbilityKit';
677import uiExtension from '@ohos.arkui.uiExtension';
678
679@Entry()
680@Component
681struct Extension {
682  storage: LocalStorage | undefined = this.getUIContext().getSharedLocalStorage();
683  @State message: string = 'EmbeddedUIExtensionAbility Index';
684  private session: UIExtensionContentSession | undefined = this.storage?.get<UIExtensionContentSession>('session');
685  private extensionWindow: uiExtension.WindowProxy | undefined = this.session?.getUIExtensionWindowProxy();
686
687  aboutToAppear(): void {
688    this.extensionWindow?.on('windowSizeChange', (size) => {
689      console.info(`size = ${JSON.stringify(size)}`);
690    });
691    this.extensionWindow?.on('avoidAreaChange', (info) => {
692      console.info(`type = ${JSON.stringify(info.type)}, area = ${JSON.stringify(info.area)}`);
693    });
694  }
695
696  aboutToDisappear(): void {
697    this.extensionWindow?.off('windowSizeChange');
698    this.extensionWindow?.off('avoidAreaChange');
699  }
700
701  build() {
702    Column() {
703      Text(this.message)
704        .fontSize(20)
705        .fontWeight(FontWeight.Bold)
706    }
707    .width('100%')
708  }
709}
710```