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<void>): void 160 161销毁UIExtensionAbility组件自身,同时关闭对应的宿主应用窗口界面。使用callback异步回调。 162 163**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 164 165**参数:** 166 167| 参数名 | 类型 | 必填 | 说明 | 168| -------- | -------- | -------- | -------- | 169| callback | AsyncCallback<void> | 是 | 回调函数。当接口调用成功,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<void> 216 217销毁UIExtensionAbility组件自身,同时关闭对应的宿主应用窗口界面。使用Promise异步回调。 218 219**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 220 221**返回值:** 222 223| 类型 | 说明 | 224| -------- | -------- | 225| Promise<void> | 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<void>): 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<void> | 是 | 回调函数。当接口调用成功,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<void> 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<void> | 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<void> 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<void> | 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<void>): 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<void> | 是 | 回调函数。当设置成功,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```