鸿蒙 Notification 通知角标设置
本文介绍了鸿蒙系统通知管理的核心功能实现,分为两部分:1. 通知授权管理:应用需通过requestEnableNotification接口首次申请通知权限(用户拒绝后错误码1600004),被拒后可用openNotificationSettings引导用户到设置页重新授权,通过isNotificationEnabled查询当前授权状态。2. 通知角标控制:使用setBadgeNumber设置桌面图
·
一、请求通知授权
应用需要获取用户授权才能发送通知。在通知发布前调用requestEnableNotification()接口,弹窗让用户选择是否允许发送通知。
注意:当用户拒绝授权后,将无法通过该接口再次拉起弹窗。如果需要再次申请,可以使用openNotificationSettings接口拉起通知管理半模态弹窗。
核心接口
| 接口 | 描述 |
|---|---|
isNotificationEnabled() |
查询通知是否授权 |
requestEnableNotification(context) |
请求发送通知的许可,第一次调用会弹窗让用户选择 |
openNotificationSettings(context) |
拉起通知管理弹窗(用户拒绝后再次申请) |
开发步骤
导入模块
import { notificationManager } from '@kit.NotificationKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { common } from '@kit.AbilityKit';
拉起通知弹窗,向用户请求通知授权
let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
notificationManager.isNotificationEnabled().then((data: boolean) => {
hilog.info(DOMAIN_NUMBER, TAG, `isNotificationEnabled success, data: ${data}`);
if (!data) {
notificationManager.requestEnableNotification(context).then(() => {
hilog.info(DOMAIN_NUMBER, TAG, `requestEnableNotification success`);
}).catch((err: BusinessError) => {
if (1600004 == err.code) {
// 用户拒绝授权
hilog.error(DOMAIN_NUMBER, TAG, `requestEnableNotification refused, code is ${err.code}`);
} else {
hilog.error(DOMAIN_NUMBER, TAG, `requestEnableNotification failed, code is ${err.code}`);
}
});
}
}).catch((err: BusinessError) => {
hilog.error(DOMAIN_NUMBER, TAG, `isNotificationEnabled fail, code is ${err.code}`);
});
拉起通知管理半模态弹窗,向用户再次申请通知授权
let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
notificationManager.isNotificationEnabled().then((data: boolean) => {
hilog.info(DOMAIN_NUMBER, TAG, `isNotificationEnabled success, data: ${data}`);
if (!data) {
notificationManager.openNotificationSettings(context).then(() => {
hilog.info(DOMAIN_NUMBER, TAG, `openNotificationSettings success`);
}).catch((err: BusinessError) => {
hilog.error(DOMAIN_NUMBER, TAG, `openNotificationSettings failed, code is ${err.code}`);
});
}
}).catch((err: BusinessError) => {
hilog.error(DOMAIN_NUMBER, TAG, `isNotificationEnabled fail, code is ${err.code}`);
});
二、通知角标
针对未读的通知,系统提供了角标设置接口,将未读通知个数显示在桌面图标的右上角。
| 场景 | 行为 |
|---|---|
| 通知增加时 | 角标上的未读通知个数需要增加 |
| 通知被查看后 | 角标上的未读通知个数需要减少,没有未读通知时,不显示角标 |
角标规则:取值≤0时清除角标;取值>99时显示99+。
增加角标的方法
| 方式 | 说明 |
|---|---|
| 发布通知时 | 在NotificationRequest的badgeNumber字段里携带,桌面收到通知后,在原角标数上累加 |
| 调用接口 | 调用setBadgeNumber()设置,桌面按设置的角标数呈现 |
减少角标的方法
目前仅支持通过setBadgeNumber()设置。
核心接口
| 接口 | 描述 |
|---|---|
setBadgeNumber(badgeNumber) |
设置角标个数 |
开发步骤
导入模块
import { notificationManager } from '@kit.NotificationKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
增加角标个数
let badgeNumber: number = 9;
notificationManager.setBadgeNumber(badgeNumber).then(() => {
hilog.info(DOMAIN_NUMBER, TAG, `Succeeded in setting badge number.`);
}).catch((err: BusinessError) => {
hilog.error(DOMAIN_NUMBER, TAG, `Failed to set badge number. Code is ${err.code}`);
});
减少角标个数
一条通知被查看后,应用需要调用接口设置剩下未读通知个数。
let badgeNumber: number = 8;
notificationManager.setBadgeNumber(badgeNumber).then(() => {
hilog.info(DOMAIN_NUMBER, TAG, `Succeeded in setting badge number.`);
}).catch((err: BusinessError) => {
hilog.error(DOMAIN_NUMBER, TAG, `Failed to set badge number. Code is ${err.code}`);
});
注意:由于setBadgeNumber为异步接口,为了确保执行顺序符合预期,需要确保上一次设置完成后才能进行下一次设置。
三、核心接口汇总
| 功能 | 接口 | 说明 |
|---|---|---|
| 查询授权状态 | isNotificationEnabled() |
返回是否已授权 |
| 请求授权 | requestEnableNotification(context) |
首次调用弹窗 |
| 再次申请授权 | openNotificationSettings(context) |
用户拒绝后拉起设置弹窗 |
| 设置角标 | setBadgeNumber(number) |
设置桌面图标角标数字 |
角标规则
| 值 | 显示效果 |
|---|---|
| ≤0 | 清除角标 |
| 1-99 | 显示数字 |
| >99 | 显示"99+" |
鸿蒙通知授权通过isNotificationEnabled检查状态,requestEnableNotification首次申请(错误码1600004表示拒绝),拒绝后可用openNotificationSettings再次引导;角标通过setBadgeNumber设置,取值≤0清除,>99显示99+,连续设置需确保异步顺序执行。
更多推荐




所有评论(0)