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: NotificationRequest, callback: AsyncCallback<void>): void | 发布通知。 | 18| [cancel](../reference/apis-notification-kit/js-apis-notificationManager.md#notificationmanagercancel)(id: number, label: string, callback: AsyncCallback<void>): 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 ```