【中秋國慶不斷更】HarmonyOS對通知類消息的管理與發佈通知(下)

来源:https://www.cnblogs.com/HarmonyOSDev/archive/2023/10/04/17742706.html
-Advertisement-
Play Games

【中秋國慶不斷更】HarmonyOS對通知類消息的管理與發佈通知(下) 一、發佈進度條類型通知 進度條通知也是常見的通知類型,主要應用於文件下載、事務處理進度顯示。HarmonyOS提供了進度條模板,發佈通知應用設置好進度條模板的屬性值,如模板名、模板數據,通過通知子系統發送到通知欄顯示。 目前系統 ...


【中秋國慶不斷更】HarmonyOS對通知類消息的管理與發佈通知(下)

一、發佈進度條類型通知

進度條通知也是常見的通知類型,主要應用於文件下載、事務處理進度顯示。HarmonyOS提供了進度條模板,發佈通知應用設置好進度條模板的屬性值,如模板名、模板數據,通過通知子系統發送到通知欄顯示。

目前系統模板僅支持進度條模板,通知模板NotificationTemplate中的data參數為用戶自定義數據,用於顯示與模塊相關的數據,效果示意如下圖所示。
file

介面說明

isSupportTemplate()是查詢模板是否支持介面,目前僅支持進度條模板。

介面名 描述
isSupportTemplate(templateName: string, callback: AsyncCallback): void 查詢模板是否存在。

開發步驟

​ 1. 導入模塊。

import NotificationManager from '@ohos.notificationManager';

​ 2. 系統是否支持進度條模板,查詢結果為支持downloadTemplate模板類通知。

NotificationManager.isSupportTemplate('downloadTemplate').then((data) => {
  console.info(`[ANS] isSupportTemplate success`);
  let isSupportTpl: boolean = data; // isSupportTpl的值為true表示支持支持downloadTemplate模板類通知,false表示不支持
  // ...
}).catch((err) => {
  console.error(`[ANS] isSupportTemplate failed, error[${err}]`);
});

說明

查詢系統支持進度條模板後,再進行後續的步驟操作。

​ 3. 構造進度條模板對象,併發布通知。

let template = {
  name:'downloadTemplate',
  data: {
    title: '標題:',
    fileName: 'music.mp4',
    progressValue: 30,
    progressMaxValue:100,
  }
}
//構造NotificationRequest對象
let notificationRquest = {
  id: 1,
  slotType: notify.SlotType.OTHER_TYPES,
  template: template,
  content: {
    contentType: notify.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
    normal: {
      title: template.data.title + template.data.fileName,
      text: "sendTemplate",
      additionalText: "30%"
    }
  },
  deliveryTime: new Date().getTime(),
  showDeliveryTime: true
}
notify.publish(notificationRquest).then(() => {
  console.info(`[ANS] publish success `);
}).catch((err) => {
  console.error(`[ANS] failed to publish, error[${err}]`);
});

二、為通知添加行為意圖

WantAgent提供了封裝行為意圖的能力,這裡所說的行為意圖主要是指拉起指定的應用組件及發佈公共事件等能力。HarmonyOS支持以通知的形式,將WantAgent從發佈方傳遞至接收方,從而在接收方觸發WantAgent中指定的意圖。例如,在通知消息的發佈者發佈通知時,通常期望用戶可以通過通知欄點擊拉起目標應用組件。為了達成這一目標,開發者可以將WantAgent封裝至通知消息中,當系統接收到WantAgent後,在用戶點擊通知欄時觸發WantAgent的意圖,從而拉起目標應用組件。

為通知添加行為意圖的實現方式如下圖所示:發佈通知的應用嚮應用組件管理服務AMS(Ability Manager Service)申請WantAgent,然後隨其他通知信息一起發送給桌面,當用戶在桌面通知欄上點擊通知時,觸發WantAgent動作。

圖1 攜帶行為意圖的通知運行機制
file

介面說明

具體介面描述,詳見WantAgent介面文檔

介面名 描述
getWantAgent(info: WantAgentInfo, callback: AsyncCallback): void 創建WantAgent。
trigger(agent: WantAgent, triggerInfo: TriggerInfo, callback?: Callback): void 觸發WantAgent意圖。
cancel(agent: WantAgent, callback: AsyncCallback): void 取消WantAgent。
getWant(agent: WantAgent, callback: AsyncCallback): void 獲取WantAgent的want。
equal(agent: WantAgent, otherAgent: WantAgent, callback: AsyncCallback): void 判斷兩個WantAgent實例是否相等。

開發步驟

​ 1. 導入模塊。

import NotificationManager from '@ohos.notificationManager';
import wantAgent from '@ohos.app.ability.wantAgent';

2.創建WantAgentInfo信息。

場景一:創建拉起Ability的WantAgent的WantAgentInfo信息。

let wantAgentObj = null; // 用於保存創建成功的wantAgent對象,後續使用其完成觸發的動作。

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

場景二:創建發佈公共事件的WantAgent的WantAgentInfo信息。

let wantAgentObj = null; // 用於保存創建成功的WantAgent對象,後續使用其完成觸發的動作。

// wantAgentInfo
let wantAgentInfo = {
    wants: [
        {
            action: 'event_name', // 設置事件名。
            parameters: {},
        }
    ],
    operationType: wantAgent.OperationType.SEND_COMMON_EVENT,
    requestCode: 0,
    wantAgentFlags: [wantAgent.WantAgentFlags.CONSTANT_FLAG],
}

​ 3. 創建WantAgent。

// 創建WantAgent
wantAgent.getWantAgent(wantAgentInfo, (err, data) => {
    if (err) {
        console.error('[WantAgent]getWantAgent err=' + JSON.stringify(err));
    } else {
        console.info('[WantAgent]getWantAgent success');
        wantAgentObj = data;
    }
});

​ 4. 構造NotificationRequest對象。

// 構造NotificationRequest對象
let notificationRequest = {
    content: {
        contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
        normal: {
            title: 'Test_Title',
            text: 'Test_Text',
            additionalText: 'Test_AdditionalText',
        },
    },
    id: 1,
    label: 'TEST',
    wantAgent: wantAgentObj,
}

​ 5. 發佈WantAgent通知。

// 通知發送
NotificationManager.publish(notificationRequest, (err) => {
    if (err) {
        console.error(`[ANS] failed to publish, error[${err}]`);
        return;
    }
    console.info(`[ANS] publish success `);
});

​ 6. 用戶通過點擊通知欄上的通知,即可觸發WantAgent的動作。

本文由博客一文多發平臺 OpenWrite 發佈!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.背景 H5 頁面做秒開優化是業務的常規操作,一般正常通過網路請求的 H5 頁面,我們都是圍繞資源載入速度優化展開。優化手段主要分兩個方向,一個是提升網路速度,一個是減少資源大小。 提升網路速度,一般的手段有 DNS 預解析、多功能變數名稱、升級 HTTP2、使用 CDN、SSR。而即使有靜態資源的網路緩 ...
  • 經過 Adobe 工程師多年來的努力,並與 Chrome 等瀏覽器供應商密切合作,通過 WebAssembly + Emscripten、Web Components + Lit、Service Workers + Workbox 和新的 Web API 的支持,終於在近期推出了 Web 版 Pho ...
  • 安裝導入 npm npm i three 導入 並非所有功能都在three,還需從子目錄導入 // three模塊 import * as three from 'three' // 一些不在three模塊的功能,這裡是OrbitControls導入示例 import { OrbitControls ...
  • 本文記錄了穩定性摸排過程中的一些思考和沉澱。 前言 在之前寫了篇文章《上線十年,81萬行Java代碼的老系統如何重構》,在文章後有同學留言問“這麼複雜的改動,質量是如何應對的”,是一個特別好的問題,當時只是從現有的一些監控、測試、卡口手段上進行了回答。但在回答過程當中就在思考一個問題,交接過來的老代 ...
  • 目錄: 1.前言 2.設計與分析 3.BUG與修正 4.缺陷與改進 5.總結 一、前言 題目集1的題目都是比較基礎的題,不需要用到其他的類,而且所有的題代碼行數都不超過40行。知識點集中在分支選擇和浮點數的處理上,題量適中,難度也較小。比較適合初學Java的學生來熟悉java,瞭解java與之前所學 ...
  • 隨著移動互聯網的發展,手機號碼已經成為我們日常生活中不可或缺的一部分。然而,在我們使用手機號碼時,我們經常需要瞭解某個手機號碼的歸屬地,以便更好的進行溝通和交流。那麼如何快速定位手機號碼的歸屬地呢?本文將基於數據源下載,用代碼的方式來實現這一目標。 一、數據源下載 在實現手機號碼定位功能之前,我們需 ...
  • 示例,將新列表中的所有值設置為 'hello': newlist = ['hello' for x in fruits] 表達式還可以包含條件,不像篩選器那樣,而是作為操縱結果的一種方式: 示例,返回 "orange" 而不是 "banana": newlist = [x if x != "bana ...
  • 【中秋國慶不斷更】OpenHarmony組件內狀態變數使用:@State裝飾器 @State裝飾的變數,或稱為狀態變數,一旦變數擁有了狀態屬性,就和自定義組件的渲染綁定起來。當狀態改變時,UI會發生對應的渲染改變。 在狀態變數相關裝飾器中,@State是最基礎的,使變數擁有狀態屬性的裝飾器,它也是大 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...