鸿蒙系统中如何实现通知功能

harmonyos 通过 ans(advanced notification service,即通知增强服务)系统服务来为应用程序提供发布通知的能力。
通知提供应用的即时消息或通信消息,用户可以直接删除或点击通知触发进一步的操作。
功能介绍
harmonyos 提供了通知功能,即在一个应用的 ui 界面之外显示的消息,主要用来提醒用户有来自该应用中的信息。
当应用向系统发出通知时,它将先以图标的形式显示在通知栏中,用户可以下拉通知栏查看通知的详细信息。
常见的使用场景:
显示接收到短消息、即时消息等。
显示应用的推送消息,如广告、版本更新等。
显示当前正在进行的事件,如播放音乐、导航、下载等。
开发指南
通知的开发指导分为创建 notificationslot、发布通知和取消通知等开发场景。
①创建 notificationslot
代码如下:
notificationslot slot = new notificationslot(“slot_001”, “slot_default”, notificationslot.level_min); // 创建notificationslot对象
slot.setlevel(level_high);//设置通知优先级
slot.setdescription(“notificationslotdescription”);
slot.setenablevibration(true); // 设置振动提醒
slot.setlockscreenvisibleness(notificationrequest.visibleness_type_public);//设置锁屏模式
slot.setenablelight(true); // 设置开启呼吸灯提醒
slot.setledlightcolor(color.red.getvalue());// 设置呼吸灯的提醒颜色try {
notificationhelper.addnotificationslot(slot);
} catch (remoteexception ex) {
hilog.warn(label, “addnotificationslot occur exception.”);
}
②发布通知
构建 notificationrequest 对象:
request = new notificationrequest(notificationid);
request.setslotid(slot.getid());
调用 setcontent() 设置通知的内容:
notificationrequest.notificationlongtextcontent content = new notificationrequest.notificationlongtextcontent();
content.settitle(title)
.settext(messagecontent);
notificationrequest.notificationcontent notificationcontent = new notificationrequest.notificationcontent(
content);
request.setgroupvalue(“group information”);
request.setcontent(notificationcontent); // 设置通知的内容
request.settapdismissed(!tapdismissed);//设置用户点击通知后自动消失
调用 publishnotification() 发布通知:
try {
notificationhelper.publishnotification(request);
} catch (remoteexception ex) {
hilog.warn(label, “publishnotification occur exception.”);
}
③取消通知
如下:
调用cancelnotification()取消指定的单条通知。
try {
notificationhelper.cancelnotification(notificationid);
} catch (remoteexception ex) {
hilog.error(label, “exception occurred during cancelnotification invocation.”);
}
调用cancelallnotifications()取消所有通知。
try {
notificationhelper.cancelallnotifications();
} catch (remoteexception ex) {
hilog.error(label, “exception occurred during cancelallnotifications invocation.”);
}
④通过 intentagent 触发通知的跳转
代码如下:
//点击通知,跳转至指定的ability
intent intent1 = new intent();
// 指定要启动的ability的bundlename和abilityname字段
operation operation = new intent.operationbuilder()
.withdeviceid(“”)
.withbundlename(“com.example.myapplication”)
.withabilityname(“com.example.myapplication.secondability”)
.build();
// 将operation对象设置到intent中
intent1.setoperation(operation);
list《intent》 intentlist = new arraylist《》();
intentlist.add(intent1);
// 定义请求码int requestcode = 200;
// 设置flags
list《intentagentconstant.flags》 flags = new arraylist《》();
flags.add(intentagentconstant.flags.update_present_flag);
// 指定启动一个有页面的ability
intentagentinfo paramsinfo = new intentagentinfo(requestcode,
intentagentconstant.operationtype.start_ability, flags, intentlist, null);
// 获取intentagent实例
intentagent agent = intentagenthelper.getintentagent(context, paramsinfo);
//5.设置通知的intentagent
request.setintentagent(agent);
实现效果图:
附上源码:
notificationutils:
public class notificationutils {
private static final int level_high = 4;
private static notificationrequest request;
private static final int my_module = 0x00201;
private static final hiloglabel label = new hiloglabel(hilog.log_app, my_module, “my_tag”);
private static final boolean tapdismissed = false;
//3.调用publishnotification()发送通知
public static void publishnotification() {
try {
notificationhelper.publishnotification(request);
} catch (remoteexception ex) {
hilog.warn(label, “publishnotification occur exception.”);
}
}
public static void initnotificationslot(context context, int notificationid, string title,
string messagecontent) {
//1.创建notificationslot
notificationslot slot = new notificationslot(“slot_001”, “slot_default”, notificationslot.level_min); // 创建notificationslot对象
slot.setlevel(level_high);//设置通知优先级
slot.setdescription(“notificationslotdescription”);
slot.setenablevibration(true); // 设置振动提醒
slot.setlockscreenvisibleness(notificationrequest.visibleness_type_public);//设置锁屏模式
slot.setenablelight(true); // 设置开启呼吸灯提醒
slot.setledlightcolor(color.red.getvalue());// 设置呼吸灯的提醒颜色
try {
notificationhelper.addnotificationslot(slot);
} catch (remoteexception ex) {
hilog.warn(label, “addnotificationslot occur exception.”);
}
request = new notificationrequest(notificationid);
request.setslotid(slot.getid());
notificationrequest.notificationlongtextcontent content = new notificationrequest.notificationlongtextcontent();
content.settitle(title)
.settext(messagecontent);
notificationrequest.notificationcontent notificationcontent = new notificationrequest.notificationcontent(
content);
request.setgroupvalue(“group information”);
request.setcontent(notificationcontent); // 设置通知的内容
request.settapdismissed(!tapdismissed);//设置用户点击通知后自动消失
//4.返回应用,首先获取intentagent
intent intent1 = new intent();
// 指定要启动的ability的bundlename和abilityname字段
operation operation = new intent.operationbuilder()
.withdeviceid(“”)
.withbundlename(“com.example.myapplication”)
.withabilityname(“com.example.myapplication.secondability”)
.build();
// 将operation对象设置到intent中
intent1.setoperation(operation);
list《intent》 intentlist = new arraylist《》();
intentlist.add(intent1);
// 定义请求码
int requestcode = 200;
// 设置flags
list《intentagentconstant.flags》 flags = new arraylist《》();
flags.add(intentagentconstant.flags.update_present_flag);
// 指定启动一个有页面的ability
intentagentinfo paramsinfo = new intentagentinfo(requestcode,
intentagentconstant.operationtype.start_ability, flags, intentlist, null);
// 获取intentagent实例
intentagent agent = intentagenthelper.getintentagent(context, paramsinfo);
//5.设置通知的intentagent
request.setintentagent(agent);
}
}
mainabilityslice:
public class mainabilityslice extends abilityslice implements clickedlistener {
@override
public void onstart(intent intent) {
super.onstart(intent);
super.setuicontent(resourcetable.layout_ability_main);
//通知
text notification = (text) findcomponentbyid(resourcetable.id_text_notification);
notification.setclickedlistener(this);
//通知标题
string title =“测试通知”;
//通知内容文本
string content=“通知的内容已经到了!”;
notificationutils.initnotificationslot(this,1,title,content);
}
@override
public void onactive() {
super.onactive();
}
@override
public void onforeground(intent intent) {
super.onforeground(intent);
}
@override
public void onclick(component component) {
switch (component.getid()){
case resourcetable.id_text_notification:
notificationutils.publishnotification();
break;
}
}
}
ability_main.xml:
《?xml version=“1.0” encoding=“utf-8”?》《directionallayout
xmlns:ohos=“http://schemas.huawei.com/res/ohos”
ohos:height=“match_parent”
ohos:orientation=“vertical”
ohos:width=“match_parent”》
《text
ohos:id=“$+id:text_notification”
ohos:width=“match_parent”
ohos:height=“match_content”
ohos:text_size=“25fp”
ohos:top_margin=“300vp”
ohos:left_margin=“15vp”
ohos:right_margin=“15vp”
ohos:background_element=“$graphic:background_text”
ohos:text=“通知”
ohos:text_weight=“1000”
ohos:text_alignment=“horizontal_center”/》《/directionallayout》
background_text.xml:
《?xml version=“1.0” encoding=“utf-8”?》《shape xmlns:ohos=“http://schemas.huawei.com/res/ohos”
ohos:shape=“rectangle”》
《corners
ohos:radius=“20”/》
《solid
ohos:color=“#a5b3a9”/》《/shape》


如何在Arduino中使用流行的GT511C3指纹传感器
输入电源的防反接保护电路设计
芯华章荣膺中国EDA市场年度领先企业
集成显卡是什么意思
赵晓泊:物联网十年变化,给社会带来价值基础
鸿蒙系统中如何实现通知功能
国产手机品牌成功把握住了京东618的有利时机将实现逆势突破
晶门科技与熊猫平板携手推出“全球首枚”针对全高清IGZO面板的单芯片内嵌式TDDI
Microchip推出全新的单芯片maXTouch触摸屏控制器系列产品
PCB设计中滤波电容布线的技巧和方法
SHPC智慧康养开启5G物联网智慧生活
5G加智慧医疗强强联合,优化高价值医疗分布
北京电信携手华为完成5G 300M商用验证,加速2B与5G网络的有机结合
realloc函数和free函数的实验及注意事项
Infoertrend的混合云存储方案在生物医药医疗领域应用
如何将锂电池电压转化成支持多种快充协议的电压
专访塞巴斯蒂安·史朗:科技最前沿的男人对目前自动驾驶及未来出行有何高见
复合管的两种连接方式
第三代半导体高速成长GaN功率元件今年产值可望大增9成
中兴通讯亮相中国国际供应链促进博览会,共助数字科技链发展