用戶通知服務,輕松實現應用與用戶的多場景交互

用戶在使用應用時,經常想要了解應用程序在執行的操作,如下載完成、新郵件到達、發布即時的客服支付通知等,這些通知除了攜帶基本的文本圖片信息外,最好還可以支持文件上傳下載進度場景下的進度條通知,以及點擊通知欄可以拉起目標應用的意圖類型通知。開發者只有滿足用戶多種場景本地通知的需求,才能帶來更好的用戶體驗。

HarmonyOS SDK用戶通知服務(Notification Kit)為開發者提供本地通知發布通道,開發者可借助Notification Kit將應用產生的通知直接在客戶端本地推送給用戶,本地通知根據通知類型、用戶設置及發布場景會產生對應的鈴聲、震動、橫幅、鎖屏、息屏、通知欄提醒和顯示。

能力范圍

Notification Kit支持的能力主要包括:

? 發布文本、進度條等類型通知。

? 攜帶或更新應用通知數字角標。

? 取消曾經發布的某條或全部通知。

? 查詢已發布的通知列表。

? 查詢應用自身通知開關狀態。

? 應用通知用戶的能力默認關閉,開發者可拉起授權框,請求用戶授權發布通知。

業務流程

使用Notification Kit的主要業務流程如下:

1.請求用戶通知授權。

2.應用發布通知到通知服務。

3.用戶通過授權后,將通知展示到通知中心。

通知樣式

Notification Kit中常用的通知樣式如下:

開發步驟

請求通知授權
  1. 導入NotificationManager模塊。
import { notificationManager } from '@kit.NotificationKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { common } from '@kit.AbilityKit';const TAG: string = '[PublishOperation]';
const DOMAIN_NUMBER: number = 0xFF00;
  1. 請求通知授權。

可通過requestEnableNotification的錯誤碼判斷用戶是否授權。若返回的錯誤碼為1600004,即為拒絕授權。

let context = getContext(this) as common.UIAbilityContext;
notificationManager.isNotificationEnabled().then((data: boolean) => {hilog.info(DOMAIN_NUMBER, TAG, "isNotificationEnabled success, data: " + JSON.stringify(data));if(!data){notificationManager.requestEnableNotification(context).then(() => {hilog.info(DOMAIN_NUMBER, TAG, `[ANS] requestEnableNotification success`);}).catch((err : BusinessError) => {if(1600004 == err.code){hilog.error(DOMAIN_NUMBER, TAG, `[ANS] requestEnableNotification refused, code is ${err.code}, message is ${err.message}`);} else {hilog.error(DOMAIN_NUMBER, TAG, `[ANS] requestEnableNotification failed, code is ${err.code}, message is ${err.message}`);}});}
}).catch((err : BusinessError) => {hilog.error(DOMAIN_NUMBER, TAG, `isNotificationEnabled fail, code is ${err.code}, message is ${err.message}`);
});
管理通知角標
  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;
  1. 增加角標個數。

發布通知在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);
  1. 減少角標個數。

一條通知被查看后,應用需要調用接口設置剩下未讀通知個數,桌面刷新角標。

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);
管理通知渠道
  1. 導入notificationManager模塊。
import { notificationManager } from '@kit.NotificationKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';const TAG: string = '[PublishOperation]';
const DOMAIN_NUMBER: number = 0xFF00;
  1. 創建指定類型的通知渠道。
// addslot回調
let addSlotCallBack = (err: BusinessError): void => {if (err) {hilog.info(DOMAIN_NUMBER, TAG, `addSlot failed, code is ${err.code}, message is ${err.message}`);} else {hilog.info(DOMAIN_NUMBER, TAG, `addSlot success`);}
}
notificationManager.addSlot(notificationManager.SlotType.SOCIAL_COMMUNICATION, addSlotCallBack);
  1. 查詢指定類型的通知渠道。

獲取對應渠道是否創建以及該渠道支持的通知提醒方式,比如是否有聲音提示,是否有震動,鎖屏是否可見等。

// getSlot回調
let getSlotCallback = (err: BusinessError, data: notificationManager.NotificationSlot): void => {if (err) {hilog.error(DOMAIN_NUMBER, TAG, `getSlot failed, code is ${JSON.stringify(err.code)}, message is ${JSON.stringify(err.message)}`);} else {hilog.info(DOMAIN_NUMBER, TAG, `getSlot success. `);if (data != null) {hilog.info(DOMAIN_NUMBER, TAG, `slot enable status is ${JSON.stringify(data.enabled)}`);hilog.info(DOMAIN_NUMBER, TAG, `slot level is ${JSON.stringify(data.level)}`);hilog.info(DOMAIN_NUMBER, TAG, `vibrationEnabled status is ${JSON.stringify(data.vibrationEnabled)}`);hilog.info(DOMAIN_NUMBER, TAG, `lightEnabled status is ${JSON.stringify(data.lightEnabled)}`);}}
}
let slotType: notificationManager.SlotType = notificationManager.SlotType.SOCIAL_COMMUNICATION;
notificationManager.getSlot(slotType, getSlotCallback);
  1. 刪除指定類型的通知渠道。
// removeSlot回調
let removeSlotCallback = (err: BusinessError): void => {if (err) {hilog.error(DOMAIN_NUMBER, TAG, `removeSlot failed, code is ${JSON.stringify(err.code)}, message is ${JSON.stringify(err.message)}`);} else {hilog.info(DOMAIN_NUMBER, TAG, "removeSlot success");}
}
let slotType: notificationManager.SlotType = notificationManager.SlotType.SOCIAL_COMMUNICATION;
notificationManager.removeSlot(slotType, removeSlotCallback);
發布通知
發布文本類型通知
  1. 導入模塊。
import { notificationManager } from '@kit.NotificationKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';const TAG: string = '[PublishOperation]';
const DOMAIN_NUMBER: number = 0xFF00;
  1. 構造NotificationRequest對象,并發布通知。

普通文本類型通知由標題、文本內容和附加信息三個字段組成,其中標題和文本內容是必填字段,大小均需要小于200字節,超出部分會被截斷。

let notificationRequest: notificationManager.NotificationRequest = {id: 1,content: {notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本類型通知normal: {title: 'test_title',text: 'test_text',additionalText: 'test_additionalText',}}
};
notificationManager.publish(notificationRequest, (err: BusinessError) => {if (err) {hilog.error(DOMAIN_NUMBER, TAG, `Failed to publish notification. Code is ${err.code}, message is ${err.message}`);return;}hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in publishing notification.');
});

多行文本類型通知繼承了普通文本類型的字段,同時新增了多行文本內容、內容概要和通知展開時的標題,其字段均小于200字節,超出部分會被截斷。通知默認顯示與普通文本相同,展開后,標題顯示為展開后標題內容,多行文本內容多行顯示。

let notificationRequest: notificationManager.NotificationRequest = {id: 3,content: {notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_MULTILINE, // 多行文本類型通知multiLine: {title: 'test_title',text: 'test_text',briefText: 'test_briefText',longTitle: 'test_longTitle',lines: ['line_01', 'line_02', 'line_03', 'line_04'],}}
};
// 發布通知
notificationManager.publish(notificationRequest, (err: BusinessError) => {if (err) {hilog.error(DOMAIN_NUMBER, TAG, `Failed to publish notification. Code is ${err.code}, message is ${err.message}`);return;}hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in publishing notification.');
});
發布進度條類型通知
  1. 導入模塊。
import { notificationManager } from '@kit.NotificationKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';const TAG: string = '[PublishOperation]';
const DOMAIN_NUMBER: number = 0xFF00;
  1. 查詢系統是否支持進度條模板,查詢結果為支持downloadTemplate模板類通知。
notificationManager.isSupportTemplate('downloadTemplate').then((data:boolean) => {hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in supporting download template notification.');let isSupportTpl: boolean = data; // isSupportTpl的值為true表示支持downloadTemplate模板類通知,false表示不支持
}).catch((err: BusinessError) => {hilog.error(DOMAIN_NUMBER, TAG, `Failed to support download template notification. Code is ${err.code}, message is ${err.message}`);
});
  1. 構造進度條模板對象,并發布通知。
let notificationRequest: notificationManager.NotificationRequest = {id: 5,content: {notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,normal: {title: 'test_title',text: 'test_text',additionalText: 'test_additionalText'}},// 構造進度條模板,name字段當前需要固定配置為downloadTemplatetemplate: {name: 'downloadTemplate',data: { title: 'File Title', fileName: 'music.mp4', progressValue: 45 }}
}// 發布通知
notificationManager.publish(notificationRequest, (err: BusinessError) => {if (err) {hilog.error(DOMAIN_NUMBER, TAG, `Failed to publish notification. Code is ${err.code}, message is ${err.message}`);return;}hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in publishing notification.');
});
為通知添加行為意圖
  1. 導入模塊。
import { notificationManager } from '@kit.NotificationKit';
import { wantAgent, WantAgent } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';const TAG: string = '[PublishOperation]';
const DOMAIN_NUMBER: number = 0xFF00;
  1. 創建WantAgentInfo信息。

場景一:創建拉起UIAbility的WantAgent的WantAgentInfo信息。
let wantAgentObj:WantAgent; // 用于保存創建成功的wantAgent對象,后續使用其完成觸發的動作。

// 通過WantAgentInfo的operationType設置動作類型
let wantAgentInfo:wantAgent.WantAgentInfo = {wants: [{deviceId: '',bundleName: 'com.samples.notification',abilityName: 'SecondAbility',action: '',entities: [],uri: '',parameters: {}}],actionType: wantAgent.OperationType.START_ABILITY,requestCode: 0,wantAgentFlags:[wantAgent.WantAgentFlags.CONSTANT_FLAG]
};

場景二:創建發布公共事件的WantAgent的WantAgentInfo信息。
let wantAgentObj:WantAgent; // 用于保存創建成功的WantAgent對象,后續使用其完成觸發的動作。

// 通過WantAgentInfo的operationType設置動作類型
let wantAgentInfo:wantAgent.WantAgentInfo = {wants: [{action: 'event_name', // 設置事件名parameters: {},}],actionType: wantAgent.OperationType.SEND_COMMON_EVENT,requestCode: 0,wantAgentFlags: [wantAgent.WantAgentFlags.CONSTANT_FLAG],
};
  1. 調用getWantAgent()方法進行創建WantAgent。
// 創建WantAgent
wantAgent.getWantAgent(wantAgentInfo, (err: BusinessError, data:WantAgent) => {if (err) {hilog.error(DOMAIN_NUMBER, TAG, `Failed to get want agent. Code is ${err.code}, message is ${err.message}`);return;}hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in getting want agent.');wantAgentObj = data;
});
  1. 構造NotificationRequest對象,并發布WantAgent通知。
// 構造NotificationRequest對象
let notificationRequest: notificationManager.NotificationRequest = {content: {notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,normal: {title: 'Test_Title',text: 'Test_Text',additionalText: 'Test_AdditionalText',},},id: 6,label: 'TEST',// wantAgentObj使用前需要保證已被賦值(即步驟3執行完成)wantAgent: wantAgentObj,
}notificationManager.publish(notificationRequest, (err: BusinessError) => {if (err) {hilog.error(DOMAIN_NUMBER, TAG, `Failed to publish notification. Code is ${err.code}, message is ${err.message}`);return;}hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in publishing notification.');
});
  1. 用戶通過點擊通知欄上的通知,系統會自動觸發WantAgent的動作。

了解更多詳情>>

獲取用戶通知服務開發指導文檔

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84768.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84768.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84768.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

蘋果獲智能錢包專利,Find My生態版圖或再擴張:錢包會“說話”還能防丟

蘋果公司近日成功獲批一項突破性專利,揭示了一種支持Find My網絡的全新智能錢包設計方案。該錢包不僅能智能管理用戶的信用卡、身份證等實體卡片,更具備了追蹤定位和通過揚聲器發聲提醒的能力,有望成為蘋果“查找”(Find My&#…

當機床開始“思考”,傳統“制造”到“智造”升級路上的法律暗礁

——首席數據官高鵬律師團隊創作,AI輔助 一、被時代推著走的工廠:從“鐵疙瘩”到“智能體”的陣痛 某汽車零部件廠的李廠長至今記得三年前的凌晨。為了趕上新能源車企的訂單,廠里咬牙引進了兩條智能生產線,可調試第三天&#xff…

概率基礎——不確定性的數學

第05篇:概率基礎——不確定性的數學 寫在前面:大家好,我是藍皮怪!前幾篇我們聊了統計學的基本概念、數據類型、描述性統計和數據可視化,今天我們要進入統計學的另一個重要基礎——概率論。你有沒有想過,為什…

爬蟲遇到base64編碼(非常規版)

一.特征 從 Base64 的核心特性入手,比如它的編碼原理(將二進制數據轉換為 ASCII 字符集)和字符集的組成(A-Z、a-z、0-9、、/ 和 )。這是 Base64 最基礎的特點,幾乎每個回答都應該包括這些內容。基于 64 個…

節拍定時器是什么?

節拍定時器是什么? 節拍定時器(SysTick Timer)是嵌入式系統中用于提供精確時間基準的核心硬件組件,尤其在ARM Cortex-M系列處理器中廣泛應用。以下是其關鍵特性和應用的綜合說明: ?? 一、核心概念與工作原理 硬件基…

SDPA(Scaled Dot-Product Attention)詳解

SDPA(Scaled Dot-Product Attention)詳解 SDPA(Scaled Dot-Product Attention,縮放點積注意力)是 Transformer 模型的核心計算單元,最早由 Vaswani 等人在 2017 年的論文《Attention Is All You Need》提出…

java通過hutool工具生成二維碼實現掃碼跳轉功能

實現&#xff1a; 首先引入zxing和hutool工具依賴 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.2</version></dependency><dependency><groupId>com.google.zxi…

數據庫數據導出到Excel表格

1.后端代碼 第一步&#xff1a;UserMapper定義根據ID列表批量查詢用戶方法 // 批量查詢用戶信息List<User> selectUserByIds(List<Integer> ids); 第二步&#xff1a;UserMapper.xml寫動態SQL&#xff0c;實現批量查詢用戶 <!--根據Ids批量查詢用戶-->&l…

Altera系列FPGA基于ADV7180解碼PAL視頻,純verilog去隔行,提供2套Quartus工程源碼和技術支持

目錄 1、前言工程概述免責聲明 2、相關方案推薦我已有的所有工程源碼總目錄----方便你快速找到自己喜歡的項目Altera系列FPGA相關方案推薦我這里已有的PAL視頻解碼方案 3、設計思路框架工程設計原理框圖輸入PAL相機ADV7180芯片解讀BT656視頻解碼模塊圖像緩存架構輸出視頻格式轉…

【教程】Windows安全中心掃描設置排除文件

轉載請注明出處&#xff1a;小鋒學長生活大爆炸[xfxuezhagn.cn] 如果本文幫助到了你&#xff0c;歡迎[點贊、收藏、關注]哦~ 目錄 背景說明 解決方法 背景說明 即使已經把實時防護等設置全都關了&#xff0c;但Windows還是會不定時給你掃描&#xff0c;然后把風險軟件給刪了…

OPenCV CUDA模塊立體匹配------對立體匹配生成的視差圖進行雙邊濾波處理類cv::cuda::DisparityBilateralFilter

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::cuda::DisparityBilateralFilter 是 OpenCV CUDA 模塊中的一個類&#xff0c;用于對立體匹配生成的視差圖進行雙邊濾波處理。這種濾波方法可…

自然語言處理期末復習

自然語言處理期末復習 一單元 自然語言處理基礎 兩個核心任務&#xff1a; 自然語言理解&#xff08;NLU, Natural Language Understanding&#xff09; 讓計算機“讀懂”人類語言&#xff0c;理解文本的語義、結構和意圖。 典型子任務包括&#xff1a;分詞、詞性標注、句法分…

黃仁勛在2025年巴黎VivaTech大會上的GTC演講:AI工廠驅動的工業革命(上)

引言 2025年6月12日,在巴黎VivaTech大會上,英偉達創始人兼CEO黃仁勛發表了題為"AI工廠驅動的工業革命"的GTC主題演講。這場持續約1小時35分鐘的演講不僅詳細闡述了英偉達在AI基礎設施、智能體技術、量子計算及機器人領域的最新突破,更系統性地勾勒出了人工智能如…

DMC-E 系列總線控制卡----雷賽板卡介紹(六)

應用軟件開發方法 DMC-E 系列總線運動控制卡的應用軟件可以在 Visual Basic 、 Visual C++ 、 C# 等高級語言 環境下開發。應用軟件開發之前,需保證 DMC-E 系列總線運動控制卡連接好從站,通過控制 卡 Motion 的 EtherCAT 總線配置界面掃描從站、設置總線通信周期…

題目類型——左右逢源

1、針對的題目&#xff1a;&#xff08;不一定正確或完整&#xff09; 數據結構為數組之類的線性結構&#xff08;也許可以拓展&#xff09;&#xff0c;于是數組中每個元素和其他元素的相對關系為左右或前后需要對數組中每個元素求解或者說最終解要根據每個元素的解得出每個元…

RAG檢索前處理

1. 查詢構建&#xff08;包括Text2SQL&#xff09; 查詢構建的相關技術棧&#xff1a; Text-to-SQLText-to-Cypher 從查詢中提取元數據&#xff08;Self-query Retriever&#xff09; 1.1 Text-to-SQL&#xff08;關系數據庫&#xff09; 1.1.1 大語言模型方法Text-to-SQL樣…

OmoFun動漫官網,動漫共和國最新入口|網頁版

OmoFun 動漫&#xff0c;又叫動漫共和國&#xff0c;是一個專注于提供豐富動漫資源的在線平臺&#xff0c;深受廣大動漫愛好者的喜愛。它匯集了海量的動漫資源&#xff0c;涵蓋日本動漫、國產動漫、歐美動漫等多種類型&#xff0c;無論是最新上映的熱門番劇還是經典老番&#x…

ue5的blender4.1groom毛發插件v012安裝和使用方法(排除了沖突錯誤)

關鍵出錯不出錯是看這個文件pyalembic-1.8.8-cp311-cp311-win_amd64.whl&#xff0c;解決和Alembic SQL工具&#xff09;的加載沖突&#xff01; 其他blender版本根據其內部的python版本選擇對應的文件解壓安裝。 1、安裝插件&#xff01;把GroomExporter_v012_Blender4.1.1(原…

windows安裝jekyll

windows安裝jekyll 安裝ruby 首先需要下載ruby RubyInstaller for Windows - RubyInstaller國內鏡像站 我的操作系統是win10所以我安裝的最新版&#xff0c;你們安裝的時候&#xff0c;也可以安裝最新版&#xff0c;我這里就不附加圖片了 如果你的ruby安裝完成之后&#x…

DBever工具自適應mysql不同版本的連接

DBever工具的連接便捷性 最近在使用DBever工具連接不同版本的mysql數據庫&#xff0c;發現這個工具確實比mysql-log工具要兼容性好很多&#xff0c;直接就可以連接不同版本的數據庫&#xff0c;比如常見的mysql數據庫版本&#xff1a;8.0和5.7&#xff0c;而且鏈接成功后&…