1# 发布实况窗类型通知(仅对系统应用开放)
2
3实况窗类型的通知可以让用户实时感知当前任务的进度。主要用于展示录音、录屏、音视频播放、计时、通话等长时任务的实时进展。此类通知不会进行持久化存储,其生命周期与通知发布方的生命周期一致。
4
5**表1** 基础类型通知中的内容分类
6
7| 类型                                                   | 值 | 描述                |
8| ------------------------------------------------------ | --- | ------------------ |
9| NOTIFICATION_CONTENT_SYSTEM_LIVE_VIEW<sup>11+</sup>    | 5  | 实况窗类型通知。    |
10
11## 接口说明
12
13通知发布接口说明详见下表,通知发布的详情可通过入参[NotificationRequest](../reference/apis-notification-kit/js-apis-inner-notification-notificationRequest-sys.md#notificationrequest)来进行指定。可以包括通知内容、通知ID、通知的通道类型和通知发送时间等信息。
14
15| **接口名** | **描述** |
16| -------- | -------- |
17| [publish](../reference/apis-notification-kit/js-apis-notificationManager.md#notificationmanagerpublish)(request:&nbsp;NotificationRequest,&nbsp;callback:&nbsp;AsyncCallback&lt;void&gt;):&nbsp;void | 发布通知。                 |
18| [cancel](../reference/apis-notification-kit/js-apis-notificationManager.md#notificationmanagercancel)(id:&nbsp;number,&nbsp;label:&nbsp;string,&nbsp;callback:&nbsp;AsyncCallback&lt;void&gt;):&nbsp;void | 取消指定的通知。      |
19
20
21## 开发步骤
22
231. 导入模块。
24
25   ```ts
26   import { notificationManager } from '@kit.NotificationKit';
27   import { BusinessError } from '@kit.BasicServicesKit';
28   import { image } from '@kit.ImageKit';
29   import { hilog } from '@kit.PerformanceAnalysisKit';
30
31   const TAG: string = '[PublishOperation]';
32   const DOMAIN_NUMBER: number = 0xFF00;
33   ```
34
352. 发布通知。
36
37   系统实况窗类型通知继承了普通文本类型的字段,新增了类型标识符、胶囊、按钮、时间和进度,该类型的具体字段描述参考[NotificationSystemLiveViewContent](../reference/apis-notification-kit/js-apis-inner-notification-notificationContent.md#notificationsystemliveviewcontent)。
38
39      ```ts
40      let imagePixelMap: image.PixelMap | undefined = undefined; // 需要获取图片PixelMap信息
41      let color = new ArrayBuffer(4);
42      imagePixelMap = await image.createPixelMap(color, {
43        size: {
44          height: 1,
45          width: 1
46        }
47      })
48      if(imagePixelMap !== undefined) {
49        let notificationRequest: notificationManager.NotificationRequest = {
50          notificationSlotType: notificationManager.SlotType.LIVE_VIEW, // 实况窗类型
51          id: 0, // 通知id,默认为0
52          content: {
53            notificationContentType : notificationManager.ContentType.NOTIFICATION_CONTENT_SYSTEM_LIVE_VIEW,
54            systemLiveView: {
55              title: "test_title",
56              text:"test_text",
57              typeCode: 1, // 调用方的类型
58              // 按钮
59              button: {
60                names: ["buttonName1"],
61                icons: [imagePixelMap],
62              },
63              // 胶囊
64              capsule: {
65                title: "testTitle",
66                icon: imagePixelMap,
67                backgroundColor: "testColor",
68              },
69              // 进度,更新进度时,只需修改progress,重复publish即可
70              progress: {
71                maxValue: 100,
72                currentValue: 21,
73                isPercentage: false,
74              },
75              // 时间
76              time: {
77                initialTime: 12,
78                isCountDown: true,
79                isPaused: true,
80                isInTitle: false,
81              }
82            }
83          }
84        };
85        // publish回调
86        let publishCallback = (err: BusinessError): void => {
87          if (err) {
88            hilog.error(DOMAIN_NUMBER, TAG, `publish failed, code is ${err.code}, message is ${err.message}`);
89          } else {
90            hilog.info(DOMAIN_NUMBER, TAG, `publish success`);
91          }
92        };
93        // 按钮回调(用户点击按钮,会返回这个回调,业务自己决定如何处理)
94        let onResponseCallback = (id:number, option:notificationManager.ButtonOptions) => {
95          hilog.info(DOMAIN_NUMBER, TAG, `response callback: ` + JSON.stringify(option) + `notificationId` + id);
96        }
97        let systemLiveViewSubscriber: notificationManager.SystemLiveViewSubscriber  = {
98          onResponse: onResponseCallback
99        };
100        // 订阅系统实况窗(按钮)
101        await notificationManager.subscribeSystemLiveView(systemLiveViewSubscriber);
102        // 发布通知
103        notificationManager.publish(notificationRequest, publishCallback);
104      }
105      ```