【中秋國慶不斷更】HarmonyOS對通知類消息的管理與發佈通知(上) 一、 通知概述 通知簡介 應用可以通過通知介面發送通知消息,終端用戶可以通過通知欄查看通知內容,也可以點擊通知來打開應用。 通知常見的使用場景: ● 顯示接收到的短消息、即時消息等。 ● 顯示應用的推送消息,如廣告、版本 ...
【中秋國慶不斷更】HarmonyOS對通知類消息的管理與發佈通知(上)
一、 通知概述
通知簡介
應用可以通過通知介面發送通知消息,終端用戶可以通過通知欄查看通知內容,也可以點擊通知來打開應用。
通知常見的使用場景:
● 顯示接收到的短消息、即時消息等。
● 顯示應用的推送消息,如廣告、版本更新等。
● 顯示當前正在進行的事件,如下載等。
HarmonyOS通過ANS(Advanced Notification Service,通知系統服務)對通知類型的消息進行管理,支持多種通知類型,如基礎類型通知、進度條類型通知。
通知業務流程
通知業務流程由通知子系統、通知發送端、通知訂閱端組成。
一條通知從通知發送端產生,通過IPC通信發送到通知子系統,再由通知子系統分發給通知訂閱端。
系統應用還支持通知相關配置,如使能開關、配置參數由系統配置發起請求,發送到通知子系統存儲到記憶體和資料庫。
二、發佈基礎類型通知
基礎類型通知主要應用於發送簡訊息、提示信息、廣告推送等,支持普通文本類型、長文本類型、多行文本類型和圖片類型。
表1 基礎類型通知中的內容分類
類型 | 描述 |
---|---|
NOTIFICATION_CONTENT_BASIC_TEXT | 普通文本類型。 |
NOTIFICATION_CONTENT_LONG_TEXT | 長文本類型。 |
NOTIFICATION_CONTENT_MULTILINE | 多行文本類型。 |
NOTIFICATION_CONTENT_PICTURE | 圖片類型。 |
目前系統僅通知欄訂閱了通知,將通知顯示在通知欄里。基礎類型通知呈現效果示意圖如下所示。
圖1 基礎類型通知呈現效果示意圖
介面說明
通知發佈介面如下表所示,不同發佈類型通知由NotificationRequest的欄位攜帶不同的信息。
介面名 | 描述 |
---|---|
publish(request: NotificationRequest, callback: AsyncCallback |
發佈通知。 |
cancel(id: number, label: string, callback: AsyncCallback |
取消指定的通知。 |
cancelAll(callback: AsyncCallback |
取消所有該應用發佈的通知。 |
開發步驟
1. 導入模塊。
import NotificationManager from '@ohos.notificationManager';
2.構造NotificationRequest對象,併發布通知。
● 普通文本類型通知由標題、文本內容和附加信息三個欄位組成,其中標題和文本內容是必填欄位。
let notificationRequest = {
id: 1,
content: {
contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本類型通知
normal: {
title: 'test_title',
text: 'test_text',
additionalText: 'test_additionalText',
}
}
}
NotificationManager.publish(notificationRequest, (err) => {
if (err) {
console.error(`[ANS] failed to publish, error[${err}]`);
return;
}
console.info(`[ANS] publish success`);
});
運行效果如下圖所示。
● 長文本類型通知繼承了普通文本類型的欄位,同時新增了長文本內容、內容概要和通知展開時的標題。通知預設顯示與普通文本相同,展開後,標題顯示為展開後標題內容,內容為長文本內容。
let notificationRequest = {
id: 1,
content: {
contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_LONG_TEXT, // 長文本類型通知
longText: {
title: 'test_title',
text: 'test_text',
additionalText: 'test_additionalText',
longText: 'test_longText',
briefText: 'test_briefText',
expandedTitle: 'test_expandedTitle',
}
}
}
// 發佈通知
NotificationManager.publish(notificationRequest, (err) => {
if (err) {
console.error(`[ANS] failed to publish, error[${err}]`);
return;
}
console.info(`[ANS] publish success`);
});
運行效果如下圖所示。
● 多行文本類型通知繼承了普通文本類型的欄位,同時新增了多行文本內容、內容概要和通知展開時的標題。通知預設顯示與普通文本相同,展開後,標題顯示為展開後標題內容,多行文本內容多行顯示。
let notificationRequest = {
id: 1,
content: {
contentType: 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) => {
if (err) {
console.error(`[ANS] failed to publish, error[${err}]`);
return;
}
console.info(`[ANS] publish success`);
});
運行效果如下圖所示。
通知繼承了普通文本類型的欄位,同時新增了圖片內容、內容概要和通知展開時的標題,圖片內容為PixelMap型對象,其大小不能超過2M。
// 圖片構造
const color = new ArrayBuffer(60000);
let bufferArr = new Uint8Array(color);
for (var i = 0; i<bufferArr.byteLength;i++) {
bufferArr[i++] = 60;
bufferArr[i++] = 20;
bufferArr[i++] = 220;
bufferArr[i] = 100;
}
let opts = { editable:true, pixelFormat:"ARGB_8888", size: {height:100, width : 150}};
await image
.createPixelMap(color, opts)
.then(async (pixelmap) => {
await pixelmap.getImageInfo().then(imageInfo => {
console.log("=====size: ====" + JSON.stringify(imageInfo.size));
}).catch(err => {
console.error("Failed to obtain the image pixel map information." + JSON.stringify(err));
return;
})
let notificationRequest = {
id: 1,
content: {
contentType: notify.ContentType.NOTIFICATION_CONTENT_PICTURE,
picture: {
title: 'test_title',
text: 'test_text',
additionalText: 'test_additionalText',
picture: pixelmap,
briefText: 'test_briefText',
expandedTitle: 'test_expandedTitle',
}
},
}
// 發送通知
NotificationManager.publish(notificationRequest, (err) => {
if (err) {
console.error(`[ANS] failed to publish, error[${err}]`);
return;
}
console.info(`[ANS] publish success `);
});
}).catch(err=>{
console.error('create pixelmap failed =========='+ JSON.stringify(err));
return;
})
運行效果如下圖所示。
本文由博客一文多發平臺 OpenWrite 發佈!