写点什么

《HarmonyOSNext 全链路通知开发指南:从基础通知到智能跳转的超详细实战》

作者:Turing_010
  • 2025-06-14
    广东
  • 本文字数:2583 字

    阅读完需:约 8 分钟

《HarmonyOSNext全链路通知开发指南:从基础通知到智能跳转的超详细实战》

《HarmonyOSNext 全链路通知开发指南:从基础通知到智能跳转的超详细实战》

##Harmony OS Next ##Ark Ts ##教育


本文适用于教育科普行业进行学习,有错误之处请指出我会修改。



🚀 1. 通知是个啥?为啥需要它?

通知就是让用户在合适的时间最舒服的方式收到有用信息的神器!举个栗子🌰:


  • 收到闺蜜消息💬立刻弹窗提示

  • 游戏版本更新🆕在通知栏温柔提醒

  • 文件下载进度📥实时显示在状态栏


💡 核心价值:帮用户高效处理任务,不错过任何重要信息!

⚡️ 三大使用场景



🎨 2. 通知的百变造型

通知会根据场景自动切换皮肤哦~

📍 不同位置的颜值展示

graph LR    A[状态栏] -->|显示为小图标| B(📱微信)    C[通知栏] -->|展示详细信息| D(您有3条新消息)    E[横幅通知] -->|浮动在屏幕顶部| F(⚠️ 系统警告!)
复制代码


设计心法

  1. 重要通知用霸屏横幅(比如来电提醒)

  2. 普通通知进通知栏集合(比如软件更新)

  3. 长期进程放状态栏(比如音乐播放)



🧩 3. 通知的解剖图(文本通知为例)

graph TB    1[① 通知小图标] --> 类型标识    2[② 应用名称] --> 微信    3[③ 时间戳] --> 系统自动生成    4[④ 展开箭头] --> 折叠内容开关    5[⑤ 内容标题] -->“今晚聚餐!”    6[⑥ 内容详情] -->“海底捞7点见”
复制代码


🚨 重点注意

  • 展开箭头只在有折叠内容时显示

  • 时间戳无需手动设置,系统自动生成



👩‍💻 4. 手把手创建通知

第一步:召唤通知模块

// 必须加载的核心装备!import { notificationManager } from '@kit.NotificationKit';
复制代码



📝 场景一:发个普通文本通知

@Entry @Component struct NotificationDemo {   publishNotification() {     // 配置通知参数    let notificationRequest: notificationManager.NotificationRequest = {       id: 1,  // 通知身份证号(必须唯一!)      content: {         notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,         normal: {           title: '今晚有暴雨⛈️',  // 标题要抓眼球!          text: '记得收衣服啦~'   // 正文说人话        }       }     }         // 发射通知!    notificationManager.publish(notificationRequest).then(() => {       console.info('通知发射成功🎉');     }).catch((err: Error) => {       console.error(`翻车啦!原因:${err}`);     });   }    build() {     Column() {       Button('点我发通知🚀')        .onClick(() => { this.publishNotification() })     }     .width('100%')   } }
复制代码


💡 实用小技巧

  • id相当于通知的身份证,重复使用会覆盖旧通知

  • 想让通知更醒目?试试长文本类型多行文本类型



📈 场景二:进度条通知(下载场景)

关键操作流程


graph TB    A[检查系统支持] --> B{支持进度条?}    B -->|Yes| C[创建模板]    B -->|No| D[弹窗提示]    C --> E[发布通知]
复制代码


完整代码示例


// 先检测设备能力notificationManager.isSupportTemplate('downloadTemplate').then(isSupport => {  if (!isSupport) {    // 优雅降级方案    promptAction.showToast({ message: '设备不支持进度条😭' })    return  }    // 配置进度条模板  let template: notificationManager.NotificationTemplate = {     name: 'downloadTemplate',  // 必须用这个名称!    data: {       progressValue: 75,       // 当前进度(0-100)       progressMaxValue: 100    // 总进度    }   }     // 组装通知  let notificationRequest: notificationManager.NotificationRequest = {     content: {       normal: {         title: '正在下载:猫猫表情包.zip',         text: '剩余5分钟',        additionalText: '75%'  // 右上角百分比      }     },    template: template   // 注入进度条  }     // 发射!  notificationManager.publish(notificationRequest)})
复制代码



🔄 动态更新通知

只需相同 ID+新内容就能刷新通知:


// 更新下载进度到90%template.data.progressValue = 90notificationRequest.content.normal.additionalText = "90%"
// 还是用同一个ID发布notificationManager.publish(notificationRequest)
复制代码



🗑️ 删除通知的两种姿势

// 精准打击(按ID删除)notificationManager.cancel(1)  
// 核弹打击(清空所有通知)notificationManager.cancelAll()
复制代码



🔧 5. 通知的高级装备

🎛️ 通知通道设置(给通知分类)

// 创建社交类通知通道(带横幅+提示音)notificationManager.addSlot(notificationManager.SlotType.SOCIAL_COMMUNICATION)
复制代码


通道类型对比表



💡 省电流打法:非重要通知用CONTENT_INFORMATION省电又安静~



🧶 通知分组功能

把同类型通知打包处理:

// 聊天消息组let chatRequest = {    id: 1001,   groupName: 'ChatGroup',  // 组名就是分类标识  content: { title: '老王:在吗?' } };
// 商品促销组 let productRequest = { id: 2001, groupName: 'PromotionGroup', content: { title: '奶茶买一送一!' } };
复制代码


分组的好处:超过 5 条自动折叠,避免通知栏变垃圾场🗑️



🔗 6. 通知的智能跳转(WantAgent)

让通知变身超链接!点击通知可跳转页面或触发事件

🎯 场景一:点击跳转指定页面

import { wantAgent } from '@kit.AbilityKit';
// 配置跳转参数const wantAgentInfo = { wants: [{ bundleName: "com.example.app", abilityName: "MainAbility" // 目标页面 }], operationType: wantAgent.OperationType.START_ABILITY}
// 绑定到通知notificationRequest.wantAgent = await wantAgent.getWantAgent(wantAgentInfo)
复制代码

📡 场景二:点击触发系统事件

// 配置公共事件const eventConfig = {  wants: [{     action: 'LAUNCH_CAMERA',  // 自定义事件名  }],  operationType: wantAgent.OperationType.SEND_COMMON_EVENT}
复制代码

⚙️ 完整工作流

sequenceDiagram    用户->>通知: 点击    通知->>WantAgent: 触发指令    WantAgent->>应用: 跳转页面    应用->>系统: 执行事件
复制代码



🧾 终极总结表


🚦 避坑指南

  1. 进度值超过 100%会闪退💥

  2. 社交类通知必须设置SOCIAL_COMMUNICATION通道

  3. WantAgent 需要在 manifest.json 声明权限


最后的小彩蛋🎉:试试在横幅通知里加 emoji,用户点击率提升 37%!(例如:您收到一个红包🎁)

用户头像

Turing_010

关注

还未添加个人签名 2025-05-22 加入

还未添加个人简介

评论

发布
暂无评论
《HarmonyOSNext全链路通知开发指南:从基础通知到智能跳转的超详细实战》_Turing_010_InfoQ写作社区