• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.PiPWindow (画中画窗口)
2
3该模块提供画中画基础功能,包括判断当前系统是否开启画中画功能,以及创建画中画控制器用于启动、停止画中画等。主要用于视频播放、视频通话或视频会议场景下,以小窗(画中画)模式呈现内容。
4
5> **说明:**
6>
7> 本模块首批接口从API version 11开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8>
9> 需要在支持SystemCapability.Window.SessionManager能力的系统上使用该模块,<!--RP1-->参考[系统能力SystemCapability使用指南](../syscap.md)<!--RP1End-->。
10
11## 导入模块
12
13```ts
14import { PiPWindow } from '@kit.ArkUI';
15```
16
17## PiPWindow.isPiPEnabled
18
19isPiPEnabled(): boolean
20
21用于判断当前系统是否支持画中画功能。
22
23**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
24
25**系统能力:** SystemCapability.Window.SessionManager
26
27**返回值:**
28
29| 类型       | 说明                                  |
30|----------|-------------------------------------|
31| boolean  | 当前系统是否开启画中画功能。true表示支持,false则表示不支持。 |
32
33**示例:**
34
35```ts
36let enable: boolean = PiPWindow.isPiPEnabled();
37console.info('isPipEnabled:' + enable);
38```
39
40## PiPWindow.create
41
42create(config: PiPConfiguration): Promise&lt;PiPController&gt;
43
44创建画中画控制器,使用Promise异步回调。
45
46**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
47
48**系统能力:** SystemCapability.Window.SessionManager
49
50**参数:**
51
52| 参数名          | 类型                                       | 必填        | 说明                                                                                                                                                                                                                                     |
53|--------------|------------------------------------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
54| config       | [PiPConfiguration](#pipconfiguration)    | 是         | 创建画中画控制器的参数。该参数不能为空,并且构造该参数的context和componentController不能为空。构造该参数时,如果指定了templateType,需保证templateType是[PiPTemplateType](#piptemplatetype)类型;如果指定了controlGroups,需保证controlGroups与templateType匹配,详见[PiPControlGroup](#pipcontrolgroup12)。 |
55
56**返回值:**
57
58| 类型                                                         | 说明                       |
59|------------------------------------------------------------|--------------------------|
60| Promise&lt;[PiPController](#pipcontroller)&gt;  | Promise对象。返回当前创建的画中画控制器。 |
61
62**错误码:**
63
64以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
65
66| 错误码ID | 错误信息                                                                                                                                         |
67|-------|----------------------------------------------------------------------------------------------------------------------------------------------|
68| 401   | Params error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
69| 801   | Capability not supported.Failed to call the API due to limited device capabilities.                                                       |
70
71**示例:**
72
73```ts
74//Index.ets
75import { BusinessError } from '@kit.BasicServicesKit';
76import { BuilderNode, FrameNode, NodeController, PiPWindow, UIContext } from '@kit.ArkUI';
77
78class Params {
79  text: string = '';
80  constructor(text: string) {
81    this.text = text;
82  }
83}
84
85// 开发者可以通过@Builder装饰器实现布局构建
86@Builder
87function buildText(params: Params) {
88  Column() {
89    Text(params.text)
90      .fontSize(20)
91      .fontColor(Color.Red)
92  }
93  .width('100%') // 宽度方向充满画中画窗口
94  .height('100%') // 高度方向充满画中画窗口
95}
96
97// 开发者可通过继承NodeController实现自定义UI控制器
98class TextNodeController extends NodeController {
99  private message: string;
100  private textNode: BuilderNode<[Params]> | null = null;
101  constructor(message: string) {
102    super();
103    this.message = message;
104  }
105
106  // 通过BuilderNode加载自定义布局
107  makeNode(context: UIContext): FrameNode | null {
108    this.textNode = new BuilderNode(context);
109    this.textNode.build(wrapBuilder<[Params]>(buildText), new Params(this.message));
110    return this.textNode.getFrameNode();
111  }
112
113  // 开发者可自定义该方法实现布局更新
114  update(message: string) {
115    console.log(`update message: ${message}`);
116    if (this.textNode !== null) {
117      this.textNode.update(new Params(message));
118    }
119  }
120}
121
122@Entry
123@Component
124struct Index {
125  private message: string = 'createPiP';
126  private pipController: PiPWindow.PiPController | undefined = undefined;
127  private mXComponentController: XComponentController = new XComponentController(); // 开发者应使用该mXComponentController初始化XComponent: XComponent( {id: 'video', type: 'surface', controller: mXComponentController} ),保证XComponent的内容可以被迁移到画中画窗口。
128  private nodeController: TextNodeController = new TextNodeController('this is custom UI');
129  private navId: string = "page_1"; // 假设当前页面的导航id为page_1,详见PiPConfiguration定义,具体导航名称由开发者自行定义。
130  private contentWidth: number = 800; // 假设当前内容宽度800px。
131  private contentHeight: number = 600; // 假设当前内容高度600px。
132  private para: Record<string, number> = { 'PropA': 47 };
133  private localStorage: LocalStorage = new LocalStorage(this.para);
134  private res: boolean = this.localStorage.setOrCreate('PropB', 121);
135  private config: PiPWindow.PiPConfiguration = {
136    context: this.getUIContext().getHostContext() as Context,
137    componentController: this.mXComponentController,
138    navigationId: this.navId,
139    templateType: PiPWindow.PiPTemplateType.VIDEO_PLAY,
140    contentWidth: this.contentWidth,
141    contentHeight: this.contentHeight,
142    controlGroups: [PiPWindow.VideoPlayControlGroup.VIDEO_PREVIOUS_NEXT],
143    customUIController: this.nodeController, // 可选,如果需要在画中画显示内容上方展示自定义UI,可设置该参数。
144    localStorage: this.localStorage, // 可选,如果需要跟踪主窗实例,可设置此参数。
145  };
146
147  createPiP() {
148    let promise: Promise<PiPWindow.PiPController> = PiPWindow.create(this.config);
149    promise.then((data: PiPWindow.PiPController) => {
150      this.pipController = data;
151      console.info(`Succeeded in creating pip controller. Data:${data}`);
152    }).catch((err: BusinessError) => {
153      console.error(`Failed to create pip controller. Cause:${err.code}, message:${err.message}`);
154    });
155  }
156
157  //仅用于功能测试,实际开发过程中开发者按功能需求设计组件
158  build() {
159    RelativeContainer() {
160      Button(this.message)
161        .onClick(() => {
162          this.createPiP();
163        })
164    }
165  }
166}
167```
168
169## PiPWindow.create<sup>12+</sup>
170
171create(config: PiPConfiguration, contentNode: typeNode.XComponent): Promise&lt;PiPController&gt;
172
173通过typeNode创建画中画控制器,使用Promise异步回调。
174
175**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
176
177**系统能力:** SystemCapability.Window.SessionManager
178
179**参数:**
180
181| 参数名          | 类型                                       | 必填        | 说明                                                                                                                                                                                                                                     |
182|--------------|------------------------------------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
183| config       | [PiPConfiguration](#pipconfiguration)    | 是         | 创建画中画控制器的参数。该参数不能为空,并且构造该参数的context不能为空。构造该参数时,如果指定了templateType,需保证templateType是[PiPTemplateType](#piptemplatetype)类型;如果指定了controlGroups,需保证controlGroups与templateType匹配,详见[PiPControlGroup](#pipcontrolgroup12)。 |
184| contentNode       | [typeNode.XComponent](js-apis-arkui-frameNode.md#xcomponent12)    | 是         | 用于渲染画中画窗口中的内容。该参数不能为空。|
185
186**返回值:**
187
188| 类型                                                         | 说明                       |
189|------------------------------------------------------------|--------------------------|
190| Promise&lt;[PiPController](#pipcontroller)&gt;  | Promise对象。返回当前创建的画中画控制器。 |
191
192**错误码:**
193
194以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
195
196| 错误码ID | 错误信息                                                                                                                                         |
197|-------|----------------------------------------------------------------------------------------------------------------------------------------------|
198| 401   | Params error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
199| 801   | Capability not supported.Failed to call the API due to limited device capabilities.                                                       |
200
201**示例:**
202
203```ts
204//Index.ts
205import { BusinessError } from '@kit.BasicServicesKit';
206import { PiPWindow, UIContext } from '@kit.ArkUI';
207import { typeNode } from '@ohos.arkui.node';
208
209@Entry
210@Component
211struct Index {
212  private message = 'createPiP'
213  private pipController: PiPWindow.PiPController | undefined = undefined;
214  private xComponentController: XComponentController = new XComponentController();
215  private context: UIContext | undefined = this.getUIContext(); // 可传入UIContext或在布局中通过this.getUIContext()为context赋有效值
216  private contentWidth: number = 800; // 假设当前内容宽度800px。
217  private contentHeight: number = 600; // 假设当前内容高度600px。
218  private config: PiPWindow.PiPConfiguration = {
219    context: this.getUIContext().getHostContext() as Context,
220    componentController: this.xComponentController,
221    templateType: PiPWindow.PiPTemplateType.VIDEO_PLAY,
222    contentWidth: this.contentWidth,
223    contentHeight: this.contentHeight,
224  };
225  private options: XComponentOptions = {
226    type: XComponentType.SURFACE,
227    controller: this.xComponentController
228  }
229  private xComponent = typeNode.createNode(this.context, 'XComponent', this.options);
230
231  createPiP() {
232    let promise: Promise<PiPWindow.PiPController> = PiPWindow.create(this.config, this.xComponent);
233    promise.then((data: PiPWindow.PiPController) => {
234      this.pipController = data;
235      console.info(`Succeeded in creating pip controller. Data:${data}`);
236    }).catch((err: BusinessError) => {
237      console.error(`Failed to create pip controller. Cause:${err.code}, message:${err.message}`);
238    });
239  }
240
241  //仅用于功能测试,实际开发过程中开发者按功能需求设计组件
242  build() {
243    RelativeContainer() {
244      Button(this.message)
245        .onClick(() => {
246          this.createPiP();
247        })
248    }
249  }
250}
251```
252
253## PiPConfiguration
254
255创建画中画控制器时的参数。
256
257**系统能力:** SystemCapability.Window.SessionManager
258
259| 名称                  | 类型                                                                         | 必填  | 说明                                                                                                                                                                                                                                                                                                                                        |
260|---------------------|----------------------------------------------------------------------------|-----|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
261| context             | [BaseContext](../apis-ability-kit/js-apis-inner-application-baseContext.md) | 是   | 表示上下文环境。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                                                                                                                                                                                                                                                                                                                                  |
262| componentController | [XComponentController](arkui-ts/ts-basic-components-xcomponent.md#xcomponentcontroller) | 是   | 表示原始[XComponent](arkui-ts/ts-basic-components-xcomponent.md)控制器。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                                                                                                                                                                                                                                                                      |
263| navigationId        | string                                                                     | 否   | 当前page导航id。<br/>1、UIAbility使用[Navigation](arkui-ts/ts-basic-components-navigation.md)管理页面,需要设置Navigation控件的id属性,并将该id设置给画中画控制器,确保还原场景下能够从画中画窗口恢复到原页面。<br/>2、UIAbility使用[Router](js-apis-router.md)管理页面时,无需设置navigationId。<br/>3、UIAbility只有单页面时,无需设置navigationId,还原场景下也能够从画中画窗口恢复到原页面。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
264| templateType        | [PiPTemplateType](#piptemplatetype)                                        | 否   | 模板类型,用以区分视频播放、视频通话或视频会议。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                                                                                                                                                                                                                                                                                                                  |
265| contentWidth        | number                                                                     | 否   | 原始内容宽度,单位为px。用于确定画中画窗口比例。当[使用typeNode的方式](#pipwindowcreate12)创建PiPController时,不传值则默认为1920。当[不使用typeNode的方式](#pipwindowcreate)创建PiPController时,不传值则默认为[XComponent](arkui-ts/ts-basic-components-xcomponent.md)组件的宽度。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                                                                 |
266| contentHeight       | number                                                                     | 否   | 原始内容高度,单位为px。用于确定画中画窗口比例。用于确定画中画窗口比例。当[使用typeNode的方式](#pipwindowcreate12)创建PiPController时,不传值则默认为1080。当[不使用typeNode的方式](#pipwindowcreate)创建PiPController时,不传值则默认为[XComponent](arkui-ts/ts-basic-components-xcomponent.md)组件的高度。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                                                                 |
267| controlGroups<sup>12+</sup>       | Array<[PiPControlGroup](#pipcontrolgroup12)>                               | 否   | 画中画控制面板的可选控件组列表,应用可以对此进行配置以决定是否显示。如果应用没有配置,面板将显示基础控件(如视频播放控件组的播放/暂停控件);如果应用选择配置,则最多可以选择三个控件。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                                                                                                                                                                                                                                                 |
268| customUIController<sup>12+</sup>      | [NodeController](js-apis-arkui-nodeController.md)           | 否   | 用于实现在画中画界面内容上方展示自定义UI功能。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                                                                                                                                                                                                                                                                                           |
269| localStorage<sup>17+</sup>      | [LocalStorage](../../ui/state-management/arkts-localstorage.md)           | 否   | 页面级别的UI状态存储单元,多实例下可用来跟踪主窗实例。<br/>**原子化服务API:** 从API version 17开始,该接口支持在原子化服务中使用。                                                                                                                                                                                                                                                                                           |
270
271## PiPWindowSize<sup>15+</sup>
272
273画中画窗口大小。
274
275**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
276
277**系统能力:** SystemCapability.Window.SessionManager
278
279| 名称   | 类型 | 可读 | 可写 | 说明       |
280| ------ | -------- | ---- | ---- | ---------- |
281| width  | number   | 是   | 否   | 窗口宽度,单位为px,该参数应为正整数,不大于屏幕宽。 |
282| height | number   | 是   | 否   | 窗口高度,单位为px,该参数应为正整数,不大于屏幕高。 |
283| scale  | number   | 是   | 否   | 窗口缩放比,显示大小相对于width和height的缩放比,该参数为浮点数,取值范围大于0.0,小于等于1.0。等于1表示与width和height一样大。 |
284
285## PiPWindowInfo<sup>15+</sup>
286
287画中画窗口信息。
288
289**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
290
291**系统能力:** SystemCapability.Window.SessionManager
292
293| 名称   | 类型 | 可读 | 可写 | 说明       |
294| ------ | -------- | ---- | ---- | ---------- |
295| windowId  | number   | 是   | 否   | 画中画窗口ID。 |
296| size  | [PiPWindowSize](#pipwindowsize15)  | 是   | 否   | 画中画窗口大小。 |
297
298## PiPTemplateType
299
300画中画媒体类型枚举。
301
302**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
303
304**系统能力:** SystemCapability.Window.SessionManager
305
306| 名称            | 值   | 说明                                   |
307|---------------|-----|--------------------------------------|
308| VIDEO_PLAY    | 0   | 表示将要切换为画中画播放的媒体类型是视频,系统依此加载视频播放模板。   |
309| VIDEO_CALL    | 1   | 表示将要切换为画中画播放的媒体类型是视频通话,系统依此加载视频通话模板。 |
310| VIDEO_MEETING | 2   | 表示将要切换为画中画播放的媒体类型是视频会议,系统依此加载视频会议模板。 |
311| VIDEO_LIVE    | 3   | 表示将要切换为画中画播放的媒体类型是直播,系统依此加载直播模板。     |
312
313## PiPState
314
315画中画生命周期状态枚举。
316
317**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
318
319**系统能力:** SystemCapability.Window.SessionManager
320
321| 名称                   | 值   | 说明                    |
322|----------------------|-----|-----------------------|
323| ABOUT_TO_START       | 1   | 表示画中画将要启动。            |
324| STARTED              | 2   | 表示画中画已经启动。            |
325| ABOUT_TO_STOP        | 3   | 表示画中画将要停止。            |
326| STOPPED              | 4   | 表示画中画已经停止。            |
327| ABOUT_TO_RESTORE     | 5   | 表示画中画将从小窗播放恢复到原始播放界面。 |
328| ERROR                | 6   | 表示画中画生命周期执行过程出现了异常。   |
329
330## PiPControlGroup<sup>12+</sup>
331
332type PiPControlGroup = VideoPlayControlGroup | VideoCallControlGroup | VideoMeetingControlGroup | VideoLiveControlGroup
333
334画中画控制面板的可选控件组列表,应用可以配置是否显示可选控件。默认情况下控制面板只显示基础控件(如视频播放控件组的播放/暂停控件)。
335
336**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
337
338**系统能力:** SystemCapability.Window.SessionManager
339
340| 类型                                              | 说明          |
341|-------------------------------------------------|-------------|
342| [VideoPlayControlGroup](#videoplaycontrolgroup12)     | 视频播放控件组。 |
343| [VideoCallControlGroup](#videocallcontrolgroup12)       | 视频通话控件组。 |
344| [VideoMeetingControlGroup](#videomeetingcontrolgroup12) | 视频会议控件组。 |
345| [VideoLiveControlGroup](#videolivecontrolgroup12)     | 视频直播控件组。 |
346
347
348## VideoPlayControlGroup<sup>12+</sup>
349
350视频播放控件组枚举。仅当[PiPTemplateType](#piptemplatetype)为VIDEO_PLAY时使用。
351
352**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
353
354**系统能力:** SystemCapability.Window.SessionManager
355
356| 名称                   | 值   | 说明                    |
357|----------------------|-----|-----------------------|
358| VIDEO_PREVIOUS_NEXT       | 101   | 视频上一个/下一个控件组。<br/>与视频快进/后退控件组为互斥控件组。如添加视频快进/后退控件组,则不可添加该控件组。           |
359| FAST_FORWARD_BACKWARD    | 102   | 视频快进/后退控件组。<br/>与视频上一个/下一个控件组为互斥控件组。如添加视频上一个/下一个控件组,则不可添加该控件组。           |
360
361## VideoCallControlGroup<sup>12+</sup>
362
363视频通话控件组枚举。仅当[PiPTemplateType](#piptemplatetype) 为VIDEO_CALL时使用。
364
365**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
366
367**系统能力:** SystemCapability.Window.SessionManager
368
369| 名称                   | 值   | 说明                    |
370|----------------------|-----|-----------------------|
371| MICROPHONE_SWITCH       | 201   | 打开/关闭麦克风控件组。            |
372| HANG_UP_BUTTON    | 202   | 挂断控件组。           |
373| CAMERA_SWITCH    | 203   | 打开/关闭摄像头控件组。            |
374| MUTE_SWITCH    | 204   | 静音控件组。            |
375
376## VideoMeetingControlGroup<sup>12+</sup>
377
378视频会议控件组枚举。仅当[PiPTemplateType](#piptemplatetype) 为VIDEO_MEETING时使用。
379
380**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
381
382**系统能力:** SystemCapability.Window.SessionManager
383
384| 名称                   | 值   | 说明                    |
385|----------------------|-----|-----------------------|
386| HANG_UP_BUTTON       | 301   | 挂断控件组。          |
387| CAMERA_SWITCH    | 302   | 打开/关闭摄像头控件组。           |
388| MUTE_SWITCH    | 303   | 静音控件组。            |
389| MICROPHONE_SWITCH       | 304   | 打开/关闭麦克风控件组。            |
390
391## VideoLiveControlGroup<sup>12+</sup>
392
393视频直播控件组枚举。仅当[PiPTemplateType](#piptemplatetype) 为VIDEO_LIVE时使用。
394
395**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
396
397**系统能力:** SystemCapability.Window.SessionManager
398
399| 名称                   | 值   | 说明                    |
400|----------------------|-----|-----------------------|
401| VIDEO_PLAY_PAUSE     | 401   |   播放/暂停直播控件组。 |
402| MUTE_SWITCH         | 402   | 静音控件组。            |
403
404## PiPActionEventType
405
406type PiPActionEventType = PiPVideoActionEvent | PiPCallActionEvent | PiPMeetingActionEvent | PiPLiveActionEvent
407
408画中画控制面板控件动作事件类型,支持以下四种。
409
410**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
411
412**系统能力:** SystemCapability.Window.SessionManager
413
414| 类型                                              | 说明          |
415|-------------------------------------------------|-------------|
416| [PiPVideoActionEvent](#pipvideoactionevent)     | 视频播放控制面板控件事件类型。 |
417| [PiPCallActionEvent](#pipcallactionevent)       | 视频通话控制面板控件事件类型。 |
418| [PiPMeetingActionEvent](#pipmeetingactionevent) | 视频会议控制面板控件事件类型。 |
419| [PiPLiveActionEvent](#pipliveactionevent)       | 直播控制面板控件事件类型。   |
420
421## PiPVideoActionEvent
422
423type PiPVideoActionEvent = 'playbackStateChanged' | 'nextVideo' | 'previousVideo' | 'fastForward' | 'fastBackward'
424
425视频播放控制事件类型。
426
427**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
428
429**系统能力:** SystemCapability.Window.SessionManager
430
431| 类型                         | 说明                                      |
432| ---------------------------- | ----------------------------------------- |
433| 'playbackStateChanged'       | 播放状态发生了变化。                      |
434| 'nextVideo'                  | 播放下一个视频。                          |
435| 'previousVideo'              | 播放上一个视频。                          |
436| 'fastForward'<sup>12+</sup>  | 视频进度快进。从API version 12 开始支持。 |
437| 'fastBackward'<sup>12+</sup> | 视频进度后退。从API version 12 开始支持。 |
438
439## PiPCallActionEvent
440
441type PiPCallActionEvent = 'hangUp' | 'micStateChanged' | 'videoStateChanged' | 'voiceStateChanged'
442
443视频通话控制事件类型。
444
445**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
446
447**系统能力:** SystemCapability.Window.SessionManager
448
449| 类型                | 说明               |
450| ------------------- | ------------------ |
451| 'hangUp'             | 挂断视频通话。     |
452| 'micStateChanged'   | 打开或关闭麦克风。 |
453| 'videoStateChanged' | 打开或关闭摄像头。 |
454| 'voiceStateChanged'<sup>12+</sup> | 静音或解除静音。   |
455
456
457## PiPMeetingActionEvent
458
459type PiPMeetingActionEvent = 'hangUp' | 'voiceStateChanged' | 'videoStateChanged' | 'micStateChanged'
460
461视频会议控制事件类型。
462
463**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
464
465**系统能力:** SystemCapability.Window.SessionManager
466
467| 类型                | 说明               |
468| ------------------- | ------------------ |
469| 'hangUp'            | 挂断视频会议。     |
470| 'voiceStateChanged' | 静音或解除静音。   |
471| 'videoStateChanged' | 打开或关闭摄像头。 |
472| 'micStateChanged'<sup>12+</sup>   | 打开或关闭麦克风。 |
473
474
475## PiPLiveActionEvent
476
477type PiPLiveActionEvent = 'playbackStateChanged' | 'voiceStateChanged'
478
479直播控制事件类型。
480
481**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
482
483**系统能力:** SystemCapability.Window.SessionManager
484
485| 类型                   | 说明             |
486| ---------------------- | ---------------- |
487| 'playbackStateChanged' | 播放或暂停直播。 |
488| 'voiceStateChanged'<sup>12+</sup> | 静音或解除静音。   |
489
490
491## PiPControlStatus<sup>12+</sup>
492
493控制面板控件状态枚举。
494
495**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
496
497**系统能力:** SystemCapability.Window.SessionManager
498
499| 名称                   | 值   | 说明                    |
500|----------------------|-----|-----------------------|
501| PLAY       | 1   | 播放。          |
502| PAUSE    | 0   | 暂停。           |
503| OPEN    | 1   | 打开。            |
504| CLOSE       | 0   | 关闭。          |
505
506## PiPControlType<sup>12+</sup>
507
508控制面板控件类型枚举。
509
510**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
511
512**系统能力:** SystemCapability.Window.SessionManager
513
514| 名称                | 值   | 说明                                   |
515|-------------------|-----|--------------------------------------|
516| VIDEO_PLAY_PAUSE  | 0   | 播放/暂停控件。   |
517| VIDEO_PREVIOUS    | 1   | 视频上一个控件。 |
518| VIDEO_NEXT        | 2   | 视频下一个控件。 |
519| FAST_FORWARD      | 3   | 视频快进控件     |
520| FAST_BACKWARD     | 4   | 视频快退控件。   |
521| HANG_UP_BUTTON           | 5   | 挂断控件。 |
522| MICROPHONE_SWITCH | 6  | 打开/关闭麦克风控件。 |
523| CAMERA_SWITCH     | 7   | 打开/关闭摄像头控件。     |
524| MUTE_SWITCH       | 8   | 打开/关闭静音控件。     |
525
526
527## ControlPanelActionEventCallback<sup>12+</sup>
528
529type ControlPanelActionEventCallback = (event: PiPActionEventType, status?: number) => void
530
531描述画中画控制面板控件动作事件回调。
532
533**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
534
535**系统能力:** SystemCapability.Window.SessionManager
536
537**参数:**
538
539| 参数名                       | 类型           | 必填    | 说明                                |
540|--------------------------|--------------|--------------|-----------------------------------|
541| event       |  [PiPActionEventType](#pipactioneventtype)       | 是 | 回调画中画控制面板控件动作事件类型。<br/>应用依据控件动作事件做相应处理,如触发'playbackStateChanged'事件时,需要开始或停止视频。 |
542| status | number | 否 | 表示可切换状态的控件当前的状态,如具备打开和关闭两种状态的麦克风控件组、摄像头控件组和静音控件组,打开为1,关闭为0。其余控件该参数返回默认值-1。 |
543
544## ControlEventParam<sup>12+</sup>
545
546画中画控制面板控件动作回调的参数。
547
548**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
549
550**系统能力:** SystemCapability.Window.SessionManager
551
552| 名称                       | 类型           | 必填    | 说明                                                                                                                                |
553|--------------------------|--------------|--------------|-----------------------------------------------------------------------------------------------------------------------------------|
554| controlType       |  [PiPControlType](#pipcontroltype12)      | 是 | 回调画中画控制面板控件动作事件类型。应用依据控件类型做相应处理,如视频模板中暂停/播放控件被点击时,需要开始或停止视频。                                                                      |
555| status | [PiPControlStatus](#pipcontrolstatus12) | 否 | 表示可切换状态的控件当前的状态,如具备打开和关闭两种状态的麦克风控件组、摄像头控件组和静音控件组,打开为PiPControlStatus.PLAY,关闭为PiPControlStatus.PAUSE。如不具备开/关和播放/暂停状态的挂断控件默认返回值为-1。 |
556
557## PiPController
558
559画中画控制器实例。用于启动、停止画中画以及更新回调注册等。
560
561下列API示例中都需先使用[PiPWindow.create()](#pipwindowcreate)方法获取到PiPController实例,再通过此实例调用对应方法。
562
563**系统能力:** SystemCapability.Window.SessionManager
564
565### startPiP
566
567startPiP(): Promise&lt;void&gt;
568
569启动画中画,使用Promise异步回调。
570
571**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
572
573**系统能力:** SystemCapability.Window.SessionManager
574
575**返回值:**
576
577| 类型                     | 说明                 |
578|------------------------|--------------------|
579| Promise&lt;void&gt;    | 无返回结果的Promise对象。   |
580
581**错误码:**
582
583以下错误码的详细介绍请参见[窗口错误码](errorcode-window.md)。
584
585| 错误码ID    | 错误信息                                                |
586|------------|--------------------------------------------------------|
587| 1300012    | The PiP window state is abnormal.                      |
588| 1300013    | Failed to create the PiP window.                       |
589| 1300014    | PiP internal error.                                    |
590| 1300015    | Repeated PiP operation.                                |
591
592**示例:**
593
594```ts
595let promise : Promise<void> = pipController.startPiP();
596promise.then(() => {
597  console.info(`Succeeded in starting pip.`);
598}).catch((err: BusinessError) => {
599  console.error(`Failed to start pip. Cause:${err.code}, message:${err.message}`);
600});
601```
602
603### stopPiP
604
605stopPiP(): Promise&lt;void&gt;
606
607停止画中画,使用Promise异步回调。
608
609**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
610
611**系统能力:** SystemCapability.Window.SessionManager
612
613**返回值:**
614
615| 类型                   | 说明                  |
616|----------------------|---------------------|
617| Promise&lt;void&gt;  | 无返回结果的Promise对象。    |
618
619**错误码:**
620
621以下错误码的详细介绍请参见[窗口错误码](errorcode-window.md)。
622
623| 错误码ID   | 错误信息                          |
624|---------|-----------------------------------|
625| 1300011 | Failed to destroy the PiP window. |
626| 1300012 | The PiP window state is abnormal. |
627| 1300015 | Repeated PiP operation.           |
628
629**示例:**
630
631```ts
632let promise : Promise<void> = pipController.stopPiP();
633promise.then(() => {
634  console.info(`Succeeded in stopping pip.`);
635}).catch((err: BusinessError) => {
636  console.error(`Failed to stop pip. Cause:${err.code}, message:${err.message}`);
637});
638```
639
640### setAutoStartEnabled
641
642setAutoStartEnabled(enable: boolean): void
643
644设置是否需要在返回桌面时自动启动画中画。
645
646**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
647
648**系统能力:** SystemCapability.Window.SessionManager
649
650**参数:**
651
652| 参数名      | 类型        | 必填    | 说明                              |
653|----------|-----------|-------|---------------------------------|
654| enable   | boolean   | 是     | 如返回桌面时需自动启动画中画,则该参数配置为true,否则为false。若设置中自动启动画中画开关为关闭状态,就算该参数配置为true,应用返回桌面时也不会自动启动画中画窗口。  |
655
656**示例:**
657
658```ts
659let enable: boolean = true;
660pipController.setAutoStartEnabled(enable);
661```
662
663### updateContentSize
664
665updateContentSize(width: number, height: number): void
666
667当媒体源切换时,向画中画控制器更新媒体源尺寸信息。
668
669**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
670
671**系统能力:** SystemCapability.Window.SessionManager
672
673**参数:**
674
675| 参数名    | 类型     | 必填  | 说明                                     |
676|--------|--------|-----|----------------------------------------|
677| width  | number | 是   | 表示媒体内容宽度,必须为大于0的数字,单位为px。用于更新画中画窗口比例。  |
678| height | number | 是   | 表示媒体内容高度,必须为大于0的数字,单位为px。用于更新画中画窗口比例。  |
679
680**错误码:**
681
682以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
683
684| 错误码ID | 错误信息                                                                                                        |
685|-------|-------------------------------------------------------------------------------------------------------------|
686| 401   | Params error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. |
687
688**示例:**
689
690```ts
691let width: number = 540; // 假设当前内容宽度变为540px。
692let height: number = 960; // 假设当前内容高度变为960px。
693pipController.updateContentSize(width, height);
694```
695
696### updatePiPControlStatus<sup>12+</sup>
697updatePiPControlStatus(controlType: PiPControlType, status: PiPControlStatus): void
698
699更新控制面板控件功能状态。
700
701**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
702
703**系统能力:** SystemCapability.Window.SessionManager
704
705**参数:**
706
707| 参数名    | 类型     | 必填  | 说明                                                                                                 |
708|--------|--------|-----|----------------------------------------------------------------------------------------------------|
709| controlType  | [PiPControlType](#pipcontroltype12)  | 是   | 表示画中画控制面板控件类型。目前仅支持VIDEO_PLAY_PAUSE、MICROPHONE_SWITCH、CAMERA_SWITCH和MUTE_SWITCH这几种控件类型,传入其他控件类型无效。 |
710| status | [PiPControlStatus](#pipcontrolstatus12)  | 是   | 表示画中画控制面板控件状态。                                                                                     |
711
712**错误码:**
713
714以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
715
716| 错误码ID | 错误信息                                                                                                        |
717|-------|-------------------------------------------------------------------------------------------------------------|
718| 401   | Params error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed |
719
720**示例:**
721
722```ts
723let controlType: PiPWindow.PiPControlType = PiPWindow.PiPControlType.VIDEO_PLAY_PAUSE; // 视频播放控制面板中播放/暂停控件。
724let status: PiPWindow.PiPControlStatus = PiPWindow.PiPControlStatus.PLAY; // 视频播放控制面板中播放/暂停控件为播放状态。
725pipController.updatePiPControlStatus(controlType, status);
726```
727
728### updateContentNode<sup>18+</sup>
729updateContentNode(contentNode: typeNode.XComponent): Promise&lt;void&gt;
730
731更新画中画节点内容。
732
733**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
734
735**系统能力:** SystemCapability.Window.SessionManager
736
737**参数:**
738
739| 参数名          | 类型                                       | 必填        | 说明                                                                                                                                                                                                                                     |
740|--------------|------------------------------------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
741| contentNode       | [typeNode.XComponent](js-apis-arkui-frameNode.md#xcomponent12)    | 是         | 用于渲染画中画窗口中的内容。该参数不能为空。|
742
743**返回值:**
744
745| 类型                   | 说明                  |
746|----------------------|---------------------|
747| Promise&lt;void&gt;  | 无返回结果的Promise对象。    |
748
749**错误码:**
750
751以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
752
753| 错误码ID | 错误信息                                                                                                        |
754|-------|-------------------------------------------------------------------------------------------------------------|
755| 401   | Params error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed |
756| 801   | Capability not supported.Failed to call the API due to limited device capabilities.                                                       |
757| 1300014    | PiP internal error.                                    |
758
759**示例:**
760
761```ts
762import { typeNode, UIContext } from '@kit.ArkUI';
763
764let context: UIContext | undefined = undefined; // 可传入UIContext或在布局中通过this.getUIContext()为context赋有效值
765
766try {
767  let contentNode = typeNode.createNode(context, "XComponent");
768  pipController.updateContentNode(contentNode);
769} catch (exception) {
770  console.error(`Failed to update content node. Cause: ${exception.code}, message: ${exception.message}`);
771}
772```
773
774### setPiPControlEnabled<sup>12+</sup>
775setPiPControlEnabled(controlType: PiPControlType, enabled: boolean): void
776
777更新控制面板控件使能状态。
778
779**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
780
781**系统能力:** SystemCapability.Window.SessionManager
782
783**参数:**
784
785| 参数名         | 类型     | 必填  | 说明                                     |
786|-------------|--------|-----|----------------------------------------|
787| controlType | [PiPControlType](#pipcontroltype12)  | 是   | 表示画中画控制面板控件类型。  |
788| enabled     | boolean | 是   | 表示画中画控制面板控件使能状态。true表示控件为可使用状态,false则为禁用状态。  |
789
790**错误码:**
791
792以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
793
794| 错误码ID | 错误信息                                                                                                        |
795|-------|-------------------------------------------------------------------------------------------------------------|
796| 401   | Params error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed |
797
798**示例:**
799
800```ts
801let controlType: PiPWindow.PiPControlType = PiPWindow.PiPControlType.VIDEO_PLAY_PAUSE; // 视频播放控制面板中播放/暂停控件。
802let enabled: boolean = false; // 视频播放控制面板中播放/暂停控件为禁用状态。
803pipController.setPiPControlEnabled(controlType, enabled);
804```
805### getPiPWindowInfo<sup>15+</sup>
806getPiPWindowInfo(): Promise&lt;[PiPWindowInfo](#pipwindowinfo15)&gt;
807
808获取画中画窗口信息。
809
810**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
811
812**系统能力:** SystemCapability.Window.SessionManager
813
814**返回值:**
815
816| 类型                   | 说明                  |
817|----------------------|---------------------|
818| Promise&lt;[PiPWindowInfo](#pipwindowinfo15)&gt;  | Promise对象,返回当前画中画窗口信息。 |
819
820**错误码:**
821
822以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[窗口错误码](errorcode-window.md)。
823
824| 错误码ID | 错误信息                                                                                                        |
825|-------|-------------------------------------------------------------------------------------------------------------|
826| 801   | Capability not supported. Failed to call the API due to limited device capabilities.                                                       |
827| 1300014    | PiP internal error.                                    |
828
829**示例:**
830
831```ts
832let pipWindowInfo: PiPWindow.PiPWindowInfo | undefined = undefined;
833try {
834  let promise : Promise<PiPWindow.PiPWindowInfo> = pipController.getPiPWindowInfo();
835  promise.then((data) => {
836    pipWindowInfo = data;
837    console.info('Success in get pip window info. Info: ' + JSON.stringify(data));
838  }).catch((err: BusinessError) => {
839    console.error(`Failed to get pip window info. Cause code: ${err.code}, message: ${err.message}`);
840  });
841} catch (exception) {
842  console.error(`Failed to get pip window info. Cause code: ${exception.code}, message: ${exception.message}`);
843}
844```
845
846### on('stateChange')
847
848on(type: 'stateChange', callback: (state: PiPState, reason: string) => void): void
849
850开启画中画生命周期状态的监听。
851
852**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
853
854**系统能力:** SystemCapability.Window.SessionManager
855
856**参数:**
857
858| 参数名        | 类型        | 必填   | 说明                                                                                                |
859|------------|-----------|------|---------------------------------------------------------------------------------------------------|
860| type       | string    | 是    | 监听事件,固定为'stateChange',即画中画生命周期状态变化事件。                                                             |
861| callback   | function  | 是    | 回调生命周期状态变化事件以及原因。<br/>state:[PiPState](#pipstate),表示当前画中画生命周期状态。<br/>reason:string,表示当前生命周期的切换原因。 |
862
863**示例:**
864
865```ts
866pipController.on('stateChange', (state: PiPWindow.PiPState, reason: string) => {
867  let curState: string = '';
868  switch (state) {
869    case PiPWindow.PiPState.ABOUT_TO_START:
870      curState = 'ABOUT_TO_START';
871      break;
872    case PiPWindow.PiPState.STARTED:
873      curState = 'STARTED';
874      break;
875    case PiPWindow.PiPState.ABOUT_TO_STOP:
876      curState = 'ABOUT_TO_STOP';
877      break;
878    case PiPWindow.PiPState.STOPPED:
879      curState = 'STOPPED';
880      break;
881    case PiPWindow.PiPState.ABOUT_TO_RESTORE:
882      curState = 'ABOUT_TO_RESTORE';
883      break;
884    case PiPWindow.PiPState.ERROR:
885      curState = 'ERROR';
886      break;
887    default:
888      break;
889  }
890  console.info('stateChange:' + curState + ' reason:' + reason);
891});
892```
893
894### off('stateChange')
895
896off(type: 'stateChange'): void
897
898关闭画中画生命周期状态的监听。
899
900**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
901
902**系统能力:** SystemCapability.Window.SessionManager
903
904**参数:**
905
906| 参数名       | 类型            | 必填    | 说明                                     |
907|-----------|---------------|-------|----------------------------------------|
908| type      | string        | 是     | 监听事件,固定为'stateChange',即画中画生命周期状态变化事件。  |
909
910**示例:**
911
912```ts
913pipController.off('stateChange');
914```
915
916### on('controlPanelActionEvent')
917
918on(type: 'controlPanelActionEvent', callback: ControlPanelActionEventCallback): void
919
920开启画中画控制面板控件动作事件的监听。推荐使用[on('controlEvent')](#oncontrolevent12)来开启画中画控制面板控件动作事件的监听。
921
922**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
923
924**系统能力:** SystemCapability.Window.SessionManager
925
926**参数:**
927
928| 参数名      | 类型         | 必填    | 说明                                                |
929|----------|------------|-------|---------------------------------------------------|
930| type     | string     | 是     | 监听事件,固定为'controlPanelActionEvent',即画中画控制面板控件动作事件。 |
931| callback | [ControlPanelActionEventCallback](#controlpanelactioneventcallback12)  | 是     | 描述画中画控制面板控件动作事件回调。                                |
932
933**示例:**
934
935```ts
936pipController.on('controlPanelActionEvent', (event: PiPWindow.PiPActionEventType, status?: number) => {
937  switch (event) {
938    case 'playbackStateChanged':
939      if (status === 0) {
940        //停止视频
941      } else if (status === 1) {
942        //播放视频
943      }
944      break;
945    case 'nextVideo':
946      // 切换到下一个视频
947      break;
948    case 'previousVideo':
949      // 切换到上一个视频
950      break;
951    case 'fastForward':
952      // 视频进度快进
953      break;
954    case 'fastBackward':
955      // 视频进度后退
956      break;
957    default:
958      break;
959  }
960  console.info('registerActionEventCallback, event:' + event);
961});
962```
963
964### on('controlEvent')<sup>12+</sup>
965
966on(type: 'controlEvent', callback: Callback&lt;ControlEventParam&gt;): void
967
968开启画中画控制面板控件动作事件的监听。
969
970**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
971
972**系统能力:** SystemCapability.Window.SessionManager
973
974**参数:**
975
976| 参数名      | 类型                                                  | 必填    | 说明                                     |
977|----------|-----------------------------------------------------|-------|----------------------------------------|
978| type     | string                                              | 是     | 监听事件,固定为'controlEvent',即画中画控制面板控件动作事件。 |
979| callback | Callback<[ControlEventParam](#controleventparam12)> | 是     | 描述画中画控制面板控件动作事件回调。                     |
980
981**示例:**
982
983```ts
984pipController.on('controlEvent', (control) => {
985  switch (control.controlType) {
986    case PiPWindow.PiPControlType.VIDEO_PLAY_PAUSE:
987      if (control.status === PiPWindow.PiPControlStatus.PAUSE) {
988        //停止视频
989      } else if (control.status === PiPWindow.PiPControlStatus.PLAY) {
990        //播放视频
991      }
992      break;
993    case PiPWindow.PiPControlType.VIDEO_NEXT:
994      // 切换到下一个视频
995      break;
996    case PiPWindow.PiPControlType.VIDEO_PREVIOUS:
997      // 切换到上一个视频
998      break;
999    case PiPWindow.PiPControlType.FAST_FORWARD:
1000      // 视频进度快进
1001      break;
1002    case PiPWindow.PiPControlType.FAST_BACKWARD:
1003      // 视频进度后退
1004      break;
1005    default:
1006      break;
1007  }
1008  console.info('registerControlEventCallback, controlType:' + control.controlType + ', status' + control.status);
1009});
1010```
1011
1012### off('controlPanelActionEvent')
1013
1014off(type: 'controlPanelActionEvent'): void
1015
1016关闭画中画控制面板控件动作事件的监听。推荐使用[off('controlEvent')](#offcontrolevent12)来关闭画中画控制面板控件动作事件的监听。
1017
1018**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1019
1020**系统能力:** SystemCapability.Window.SessionManager
1021
1022**参数:**
1023
1024| 参数名        | 类型                           | 必填   | 说明                                            |
1025|------------|------------------------------|------|-----------------------------------------------|
1026| type       | string                       | 是    | 监听事件,固定为'controlPanelActionEvent',即画中画控制面板控件动作事件。   |
1027
1028**示例:**
1029
1030```ts
1031pipController.off('controlPanelActionEvent');
1032```
1033
1034### off('controlEvent')<sup>12+</sup>
1035
1036off(type: 'controlEvent', callback?: Callback&lt;ControlEventParam&gt;): void
1037
1038关闭画中画控制面板控件动作事件的监听。
1039
1040**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1041
1042**系统能力:** SystemCapability.Window.SessionManager
1043
1044**参数:**
1045
1046| 参数名        | 类型                                                  | 必填 | 说明                                                     |
1047|------------|-----------------------------------------------------|----|--------------------------------------------------------|
1048| type       | string                                              | 是  | 监听事件,固定为'controlEvent',即画中画控制面板控件动作事件。                 |
1049| callback | Callback<[ControlEventParam](#controleventparam12)> | 否  | 描述画中画控制面板控件动作事件回调。如果不传该参数时,解除type为'controlEvent'的所有回调。 |
1050
1051**示例:**
1052
1053```ts
1054pipController.off('controlEvent', () => {});
1055```
1056
1057### on('pipWindowSizeChange')<sup>15+</sup>
1058
1059on(type: 'pipWindowSizeChange', callback: Callback&lt;PiPWindowSize&gt;): void
1060
1061开启画中画窗口尺寸变化事件的监听。
1062
1063**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
1064
1065**系统能力:** SystemCapability.Window.SessionManager
1066
1067**参数:**
1068
1069| 参数名      | 类型                                          | 必填    | 说明                                                |
1070|----------|---------------------------------------------|-------|---------------------------------------------------|
1071| type     | string                                      | 是     | 监听事件,固定为'pipWindowSizeChange',即画中画窗口尺寸变化事件。 |
1072| callback | Callback<[PiPWindowSize](#pipwindowsize15)> | 是     | 回调函数。返回当前画中画窗口的尺寸。 |
1073
1074**错误码:**
1075
1076以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[窗口错误码](errorcode-window.md)。
1077
1078| 错误码ID | 错误信息 |
1079| ------- | -------------------------------------------- |
1080| 401     | Params error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. |
1081| 801   | Capability not supported.Failed to call the API due to limited device capabilities.                                                       |
1082| 1300014    | PiP internal error.                                    |
1083
1084**示例:**
1085
1086```ts
1087try {
1088  pipController.on('pipWindowSizeChange', (size: PiPWindow.PiPWindowSize) => {
1089    console.info('Succeeded in enabling the listener for pip window size changes. size: ' + JSON.stringify(size));
1090  });
1091} catch (exception) {
1092  console.error(`Failed to enable the listener for pip window size changes. Cause code: ${exception.code}, message: ${exception.message}`);
1093}
1094```
1095
1096### off('pipWindowSizeChange')<sup>15+</sup>
1097
1098off(type: 'pipWindowSizeChange', callback?: Callback&lt;PiPWindowSize&gt;): void
1099
1100关闭画中画窗口尺寸变化事件的监听。
1101
1102**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
1103
1104**系统能力:** SystemCapability.Window.SessionManager
1105
1106**参数:**
1107
1108| 参数名      | 类型         | 必填 | 说明                                                                  |
1109|----------|------------|----|---------------------------------------------------------------------|
1110| type     | string     | 是  | 监听事件,固定为'pipWindowSizeChange',即画中画窗口尺寸变化事件。                         |
1111| callback | Callback<[PiPWindowSize](#pipwindowsize15)> | 否  | 回调函数。返回当前画中画窗口的尺寸。如果传入参数,则关闭该监听。如果未传入参数,解除type为'pipWindowSizeChange'的所有回调。 |
1112
1113**错误码:**
1114
1115以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[窗口错误码](errorcode-window.md)。
1116
1117| 错误码ID | 错误信息 |
1118| ------- | -------------------------------------------- |
1119| 401     | Params error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. |
1120| 801   | Capability not supported.Failed to call the API due to limited device capabilities.                                                       |
1121| 1300014    | PiP internal error.                                    |
1122
1123**示例:**
1124
1125```ts
1126const callback = (size: PiPWindow.PiPWindowSize) => {
1127  // ...
1128}
1129try {
1130  // 通过on接口开启监听
1131  pipController.on('pipWindowSizeChange', callback);
1132} catch (exception) {
1133  console.error(`Failed to enable the listener for pip window size changes. Cause code: ${exception.code}, message: ${exception.message}`);
1134}
1135
1136try {
1137  // 关闭指定callback的监听
1138  pipController.off('pipWindowSizeChange', callback);
1139  // 如果通过on开启多个callback进行监听,同时关闭所有监听:
1140  pipController.off('pipWindowSizeChange');
1141} catch (exception) {
1142  console.error(`Failed to disable the listener for pip window size changes. Cause code: ${exception.code}, message: ${exception.message}`);
1143}
1144```