14、鸿蒙学习——管理通知角标

针对未读的通知,系统提供了角标设置接口,将未读通知个数显示在桌面图标的右上角角标上。

通知增加时,角标上显示的未读通知个数需要增加。

通知被查看后,角标上显示的未读通知个数需要减少,没有未读通知时,不显示角标。

一、接口说明

当角标设定个数取值0时,表示清除角标。取值大于99时,通知角标将显示99+。

1、增加角标数,支持如下两种方法:

(1)发布通知时,在NotificationRequest的badgeNumber字段里携带,桌面收到通知后,在原角标数上累加、呈现。

(2)调用接口setBadgeNumber()设置,桌面按设置的角标数呈现。

2、减少角标数,目前仅支持通过setBadgeNumber()设置。

接口名 描述
setBadgeNumber(badgeNumber: number, callback: AsyncCallback<void>): void 设置角标个数。

二、开发步骤

1、导入NotificationManager模块。

复制代码
import { notificationManager } from '@kit.NotificationKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';

const TAG: string = '[PublishOperation]';
const DOMAIN_NUMBER: number = 0xFF00;

2、增加角标个数。

发布通知在NotificationRequest的badgeNumber字段里携带,可参考通知发布章节。

示例为调用setBadgeNumber接口增加角标,在发布完新的通知后,调用该接口。

复制代码
let setBadgeNumberCallback = (err: BusinessError): void => {
  if (err) {
    hilog.error(DOMAIN_NUMBER, TAG, `Failed to set badge number. Code is ${err.code}, message is ${err.message}`);
    return;
  }
  hilog.info(DOMAIN_NUMBER, TAG, `Succeeded in setting badge number.`);
}

let badgeNumber = 9;
notificationManager.setBadgeNumber(badgeNumber, setBadgeNumberCallback);

3、减少角标个数。

一条通知被查看后,应用需要调用接口设置剩下未读通知个数,桌面刷新角标。

复制代码
let setBadgeNumberCallback = (err: BusinessError): void => {
  if (err) {
    hilog.error(DOMAIN_NUMBER, TAG, `Failed to set badge number. Code is ${err.code}, message is ${err.message}`);
    return;
  }
  hilog.info(DOMAIN_NUMBER, TAG, `Succeeded in setting badge number.`);
}

let badgeNumber = 8;
notificationManager.setBadgeNumber(badgeNumber, setBadgeNumberCallback);

三、常见问题

由于setBadgeNumber为异步接口,使用setBadgeNumber连续设置角标时,为了确保执行顺序符合预期,需要确保上一次设置完成后才能进行下一次设置。

  • 反例

每次接口调用是相互独立的、没有依赖关系的,实际执行时无法保证调用顺序。

示例如下:

复制代码
let badgeNumber: number = 10;
notificationManager.setBadgeNumber(badgeNumber).then(() => {
  hilog.info(DOMAIN_NUMBER, TAG, `setBadgeNumber 10 success.`);
});
badgeNumber = 11;
notificationManager.setBadgeNumber(badgeNumber).then(() => {
  hilog.info(DOMAIN_NUMBER, TAG, `setBadgeNumber 11 success.`);
});
  • 正例

多次接口调用存在依赖关系,确保上一次设置完成后才能进行下一次设置。

示例如下:

复制代码
let badgeNumber: number = 10;
notificationManager.setBadgeNumber(badgeNumber).then(() => {
  hilog.info(DOMAIN_NUMBER, TAG, `setBadgeNumber 10 success.`);
  badgeNumber = 11;
  notificationManager.setBadgeNumber(badgeNumber).then(() => {
    hilog.info(DOMAIN_NUMBER, TAG, `setBadgeNumber 11 success.`);
  });
});

参考:文档中心

相关推荐
@小博的博客3 小时前
【Linux探索学习】第二篇Linux的基本指令(2)——开启Linux学习第二篇
linux·运维·学习
007php0075 小时前
某大厂跳动面试:计算机网络相关问题解析与总结
java·开发语言·学习·计算机网络·mysql·面试·职场和发展
知识分享小能手5 小时前
微信小程序入门学习教程,从入门到精通,微信小程序核心 API 详解与案例(13)
前端·javascript·学习·react.js·微信小程序·小程序·vue
递归不收敛5 小时前
吴恩达机器学习课程(PyTorch 适配)学习笔记:3.3 推荐系统全面解析
pytorch·学习·机器学习
高工智能汽车6 小时前
棱镜观察|极氪销量遇阻?千里智驾左手服务吉利、右手对标华为
人工智能·华为
又是忙碌的一天8 小时前
前端学习 JavaScript(2)
前端·javascript·学习
蒙奇D索大8 小时前
【数据结构】考研数据结构核心考点:二叉排序树(BST)全方位详解与代码实现
数据结构·笔记·学习·考研·算法·改行学it
玲娜贝儿--努力学习买大鸡腿版8 小时前
推荐算法学习笔记(十九)阿里SIM 模型
笔记·学习·推荐算法
光影少年8 小时前
Flutter生态及学习路线
学习·flutter
尤利乌斯.X8 小时前
复杂网络仿真从入门到精通:0 学习路线
网络·学习·matlab·仿真·复杂网络