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