• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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-1)的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): Promise\<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-1)的badgeNumber字段里携带,可参考[通知发布](text-notification.md)章节。
43
44   示例为调用setBadgeNumber接口增加角标,在发布完新的通知后,调用该接口。
45
46    ```ts
47    let badgeNumber: number = 9;
48    notificationManager.setBadgeNumber(badgeNumber).then(() => {
49      hilog.info(DOMAIN_NUMBER, TAG, `Succeeded in setting badge number.`);
50    }).catch((err: BusinessError) => {
51      hilog.error(DOMAIN_NUMBER, TAG, `Failed to set badge number. Code is ${err.code}, message is ${err.message}`);
52    });
53    ```
54
553. 减少角标个数。
56
57   一条通知被查看后,应用需要调用接口设置剩下未读通知个数,桌面刷新角标。
58
59    ```ts
60    let badgeNumber: number = 8;
61    notificationManager.setBadgeNumber(badgeNumber).then(() => {
62      hilog.info(DOMAIN_NUMBER, TAG, `Succeeded in setting badge number.`);
63    }).catch((err: BusinessError) => {
64      hilog.error(DOMAIN_NUMBER, TAG, `Failed to set badge number. Code is ${err.code}, message is ${err.message}`);
65    });
66    ```
67
68## 常见问题
69
70由于setBadgeNumber为异步接口,使用setBadgeNumber连续设置角标时,为了确保执行顺序符合预期,需要确保上一次设置完成后才能进行下一次设置。
71
72- 反例
73
74    每次接口调用是相互独立的、没有依赖关系的,实际执行时无法保证调用顺序。
75
76    示例如下:
77
78    ```ts
79    let badgeNumber: number = 10;
80    notificationManager.setBadgeNumber(badgeNumber).then(() => {
81      hilog.info(DOMAIN_NUMBER, TAG, `setBadgeNumber 10 success.`);
82    });
83    badgeNumber = 11;
84    notificationManager.setBadgeNumber(badgeNumber).then(() => {
85      hilog.info(DOMAIN_NUMBER, TAG, `setBadgeNumber 11 success.`);
86    });
87    ```
88
89- 正例
90
91    多次接口调用存在依赖关系,确保上一次设置完成后才能进行下一次设置。
92
93    示例如下:
94
95    ```ts
96    let badgeNumber: number = 10;
97    notificationManager.setBadgeNumber(badgeNumber).then(() => {
98      hilog.info(DOMAIN_NUMBER, TAG, `setBadgeNumber 10 success.`);
99      badgeNumber = 11;
100      notificationManager.setBadgeNumber(badgeNumber).then(() => {
101        hilog.info(DOMAIN_NUMBER, TAG, `setBadgeNumber 11 success.`);
102      });
103    });
104    ```
105