1# 管理通知角标
2
3针对未读的通知,系统提供了角标设置接口,将未读通知个数显示在桌面图标的右上角角标上。
4
5通知增加时,角标上显示的未读通知个数需要增加。
6
7通知被查看后,角标上显示的未读通知个数需要减少,没有未读通知时,不显示角标。
8
9
10## 接口说明
11
12当角标设定个数取值0时,表示清除角标。取值大于99时,通知角标将显示99+。
13
14- 增加角标数,支持如下两种方法:
15
16   - 发布通知时,在[NotificationRequest](../reference/apis-notification-kit/js-apis-inner-notification-notificationRequest.md#notificationrequest)的badgeNumber字段里携带,桌面收到通知后,在原角标数上累加、呈现。
17
18   - 调用接口[setBadgeNumber()](../reference/apis-notification-kit/js-apis-notificationManager.md#notificationmanagersetbadgenumber10)设置,桌面按设置的角标数呈现。
19
20- 减少角标数,目前仅支持通过[setBadgeNumber()](../reference/apis-notification-kit/js-apis-notificationManager.md#notificationmanagersetbadgenumber10)设置。
21
22  | **接口名** | **描述** |
23  | -------- | -------- |
24  | setBadgeNumber(badgeNumber: number, callback: AsyncCallback\<void\>): void | 设置角标个数。 |
25
26
27## 开发步骤
28
291. 导入NotificationManager模块。
30
31   ```ts
32   import { notificationManager } from '@kit.NotificationKit';
33   import { hilog } from '@kit.PerformanceAnalysisKit';
34   import { BusinessError } from '@kit.BasicServicesKit';
35
36   const TAG: string = '[PublishOperation]';
37   const DOMAIN_NUMBER: number = 0xFF00;
38   ```
39
402. 增加角标个数。
41
42   发布通知在[NotificationRequest](../reference/apis-notification-kit/js-apis-inner-notification-notificationRequest.md#notificationrequest)的badgeNumber字段里携带,可参考[通知发布](text-notification.md)章节。
43
44   示例为调用setBadgeNumber接口增加角标,在发布完新的通知后,调用该接口。
45
46    ```ts
47    let setBadgeNumberCallback = (err: BusinessError): void => {
48      if (err) {
49        hilog.error(DOMAIN_NUMBER, TAG, `Failed to set badge number. Code is ${err.code}, message is ${err.message}`);
50        return;
51      }
52      hilog.info(DOMAIN_NUMBER, TAG, `Succeeded in setting badge number.`);
53    }
54
55    let badgeNumber = 9;
56    notificationManager.setBadgeNumber(badgeNumber, setBadgeNumberCallback);
57    ```
58
593. 减少角标个数。
60
61   一条通知被查看后,应用需要调用接口设置剩下未读通知个数,桌面刷新角标。
62
63    ```ts
64    let setBadgeNumberCallback = (err: BusinessError): void => {
65      if (err) {
66        hilog.error(DOMAIN_NUMBER, TAG, `Failed to set badge number. Code is ${err.code}, message is ${err.message}`);
67        return;
68      }
69      hilog.info(DOMAIN_NUMBER, TAG, `Succeeded in setting badge number.`);
70    }
71
72    let badgeNumber = 8;
73    notificationManager.setBadgeNumber(badgeNumber, setBadgeNumberCallback);
74    ```
75
76## 常见问题
77
78由于setBadgeNumber为异步接口,使用setBadgeNumber连续设置角标时,为了确保执行顺序符合预期,需要确保上一次设置完成后才能进行下一次设置。
79
80- 反例
81
82    每次接口调用是相互独立的、没有依赖关系的,实际执行时无法保证调用顺序。
83
84    示例如下:
85
86    ```ts
87    let badgeNumber: number = 10;
88    notificationManager.setBadgeNumber(badgeNumber).then(() => {
89      hilog.info(DOMAIN_NUMBER, TAG, `setBadgeNumber 10 success.`);
90    });
91    badgeNumber = 11;
92    notificationManager.setBadgeNumber(badgeNumber).then(() => {
93      hilog.info(DOMAIN_NUMBER, TAG, `setBadgeNumber 11 success.`);
94    });
95    ```
96
97- 正例
98
99    多次接口调用存在依赖关系,确保上一次设置完成后才能进行下一次设置。
100
101    示例如下:
102
103    ```ts
104    let badgeNumber: number = 10;
105    notificationManager.setBadgeNumber(badgeNumber).then(() => {
106      hilog.info(DOMAIN_NUMBER, TAG, `setBadgeNumber 10 success.`);
107      badgeNumber = 11;
108      notificationManager.setBadgeNumber(badgeNumber).then(() => {
109        hilog.info(DOMAIN_NUMBER, TAG, `setBadgeNumber 11 success.`);
110      });
111    });
112    ```
113