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