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