鴻蒙HarmonyOS實戰-Stage模型(信息傳遞載體Want)

🚀前言

應用中的信息傳遞是為了實現各種功能和交互。信息傳遞可以幫助用戶和應用之間進行有效的溝通和交流。通過信息傳遞,應用可以向用戶傳遞重要的消息、通知和提示,以提供及時的反饋和指導。同時,用戶也可以通過信息傳遞向應用發送指令、請求和反饋,以實現個性化的需求和操作。

信息傳遞還可以幫助應用之間實現數據的共享和交互。通過信息傳遞,不同應用可以實現數據的互通,以實現更多的功能和服務。例如,一個購物應用可以通過信息傳遞與支付應用進行數據交互,以實現支付功能;一個社交媒體應用可以通過信息傳遞與地圖應用進行數據交互,以實現位置分享功能。

此外,信息傳遞還可以幫助應用之間實現聯動和協作。通過信息傳遞,應用可以實現多個功能的組合和協同,以提供更加豐富和綜合的服務。例如,一個音樂應用可以與鬧鐘應用進行信息傳遞,以實現在特定時間播放特定的音樂。

🚀一、信息傳遞載體Want

🔎1.Want概述

🦋1.1 Want的定義與用途

HarmonyOS中的"Want"是一個用于定義和控制應用程序之間通信的基本概念。它可以用來描述一個應用程序對某個特定操作的需求或意愿,比如獲取某個設備的位置信息、訪問某個傳感器的數據等。

使用"Want"可以實現應用程序之間的無縫協作和互操作。通過定義和使用"Wants",應用程序可以根據自身的需求發送請求,并且可以接收和處理其他應用程序發送的請求。這種機制能夠促進應用程序之間的交互和共享,并且使得整個系統更加智能和高效。

"Wants"的使用可以帶來許多好處。首先,它可以簡化應用程序之間的通信和協作,減少開發人員的工作量。其次,它可以增強系統的靈活性和可擴展性,使得應用程序能夠動態地適應不同的環境和設備。最后,它可以提供更加個性化和智能化的用戶體驗,使得應用程序能夠更好地理解用戶的需求并作出相應的反應。

image

🦋1.2 Want的類型

在HarmonyOS中,信息傳遞載體Want的類型可以分為兩種:顯式Want和隱式Want。

顯式Want:顯式Want是指明確指定要操作的組件或服務的Want。通過顯式Want,可以精確地指定要傳遞給目標組件或服務的信息,并指定具體的要執行的操作。顯式Want會包含組件名和操作類型等明確的指令信息。例如,可以使用顯式Want來啟動指定的Activity或調用指定的服務。

let wantInfo = {deviceId: '', // deviceId為空表示本設備bundleName: 'com.example.myapplication',abilityName: 'FuncAbility',
}

隱式Want:隱式Want是指不明確指定要操作的組件或服務的Want,而是根據一定的規則和條件來進行匹配。通過隱式Want,可以實現組件之間的解耦和靈活性。隱式Want一般包含一組動作、類別、數據類型等條件,系統會根據這些條件來匹配合適的組件或服務。例如,可以使用隱式Want來處理某個特定類型的數據或根據某個特定的動作執行相應的操作。

let wantInfo = {// uncomment line below if wish to implicitly query only in the specific bundle.// bundleName: 'com.example.myapplication',action: 'ohos.want.action.search',// entities can be omittedentities: [ 'entity.system.browsable' ],uri: 'https://www.test.com:8080/query/student',type: 'text/plain',
};

🔎2.顯式Want與隱式Want匹配規則

🦋2.1 隱式Want匹配原理詳解

系統將調用方傳入的want參數(包含action、entities、uri和type屬性)與已安裝待匹配的應用Ability的skills配置(包含actions、entities、uris和type屬性)依次進行匹配。當四個屬性匹配均通過,則此應用才會被應用選擇器展示給用戶進行選擇。

??2.1.1 want參數的action匹配規則

image

image

??2.1.2 want參數的entities匹配規則

image

image

??2.1.3 want參數的uri和type匹配規則

image

image

image

??2.1.4 uri匹配規則

以下是根據給定匹配規則展示的表格:

image

待匹配Ability的skills配置的uris中scheme、host、port、path、pathStartWith和pathRegex屬性拼接,如果依次聲明了path、pathStartWith和pathRegex屬性時,uris將分別拼接為如下三種表達式:

  • 全路徑表達式:scheme://host:port/path

  • 前綴表達式:scheme://host:port/pathStartWith

  • 正則表達式:scheme://host:port/pathRegex

??2.1.5 type匹配規則

image

🔎3.常見action與entities

🦋3.1 action

表示調用方要執行的通用操作(如查看、分享、應用詳情)

image

🦋3.2 entities

表示目標Ability的類別信息(如瀏覽器、視頻播放器)

image

🔎4.使用顯式Want啟動Ability

1、啟動方

新建callerAbility

image

2、被啟動方

同理新建calleeAbility

image

3、啟動方UI

import common from '@ohos.app.ability.common';
@Entry
@Component
struct Index {@State message: string = 'callerAbility'build() {Row() {Column() {Text('hello').fontSize(50).fontWeight(FontWeight.Bold)// A new button with will call explicitStartAbility() when clicked.Button("CLICKME").onClick(this.explicitStartAbility) // explicitStartAbility見下面示例代碼// ...}.width('100%')}.height('100%')}async explicitStartAbility() {try {// Explicit want with abilityName specified.let want = {deviceId: "",bundleName: "com.example.myapplication",abilityName: "calleeAbility"};let context = getContext(this) as common.UIAbilityContext;await context.startAbility(want);console.info(`explicit start ability succeed`);} catch (error) {console.info(`explicit start ability failed with ${error.code}`);}}
}

4、執行

image

🔎5.使用隱式Want打開網址

1、module.json5配置

"skills": [{"entities": ["entity.system.browsable"// ...],"actions": ["ohos.want.action.viewData"// ...],"uris": [{"scheme": "https","host": "www.test.com","port": "8080",// prefix matching"pathStartWith": "query","type": "text/*"},{"scheme": "http",// ...}// ...]},
]

image

2、定義跳轉函數

async implicitStartAbility() {try {let want = {// uncomment line below if wish to implicitly query only in the specific bundle.// bundleName: "com.example.myapplication","action": "ohos.want.action.viewData",// entities can be omitted."entities": [ "entity.system.browsable" ],"uri": "https://www.test.com:8080/query/student","type": "text/plain"}let context = getContext(this) as common.UIAbilityContext;await context.startAbility(want)console.info(`explicit start ability succeed`)} catch (error) {console.info(`explicit start ability failed with ${error.code}`)}}

image

image

3、運行

image

🔎6.應用間使用Want分享數據

1、分享方

讀取文件

import fileIO from '@ohos.fileio';// let path = ...
// file open where path is a variable contains the file path.
let fileFd = fileIO.openSync(path, 0o102, 0o666);

傳輸文件信息構造

import wantConstant from '@ohos.ability.wantConstant';// let path = ...
// let fileFd = ...
// let fileSize = ...
let want = {// This action is used to implicitly match the application selctor.action: wantConstant.Action.ACTION_SELECT,// This is the custom parameter in the first layer of want// which is intended to add info to application selector.parameters: {// The MIME type of pdf"ability.picker.type": "application/pdf","ability.picker.fileNames": [path],"ability.picker.fileSizes": [fileSize],// This a nested want which will be directly send to the user selected application.         "ability.want.params.INTENT": {"action": "ohos.want.action.sendData","type": "application/pdf","parameters": {"keyFd": {"type": "FD", "value": fileFd}}}}
}

image

image

2、被分享方

定義skills

"skills": [{"entities": [// ...],"actions": ["ohos.want.action.sendData"// ...],"uris": [{"type": "application/pdf"},// ...]},
]

2、接收數據

onCreate(want, launchParam) {// note when keyFd is undefined, app crash will happen.if (want["parameters"]["keyFd"] !== undefined) {// receive file descriptorlet fd = want["parameters"]["keyFd"].value;// ...}
}

文章轉載自:蜀道山QAQ

原文鏈接:https://www.cnblogs.com/shudaoshan/p/18211814

體驗地址:引邁 - JNPF快速開發平臺_低代碼開發平臺_零代碼開發平臺_流程設計器_表單引擎_工作流引擎_軟件架構

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

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

相關文章

FPGA 第4章 攝像頭Bayer轉rgb

參考文獻 彩色MT9V034攝像頭 Bayer轉rgb FPGA實現 https://www.cnblogs.com/hqz68/p/10413896.html 文章目錄 前言Bayer轉rgb算法解析 總結 前言 Bayer格式是相機內部的原始數據, 一般后綴名為.raw。 對于彩色圖像,一般是三原色數據,rgb格式。但是攝像頭一個像素…

【linux-IMX6ULL-LED字符驅動框架完善】

目錄 1.簡介2.前置知識2.1 重要函數及結構體2.2 程序框架流程 3. 代碼詳解: 1.簡介 在上節,我對linux-IMX6ULL-字符設備驅動簡單框架實驗進行了說明和構建,但是也存在幾個問題; 需要手動指定設備號,不能自…

TCP 與 UDP

0. tcp 與 udp 的 異同特性 TCPUDPname傳輸控制協議用戶數據報協議面向連接? 需要 傳輸數據前建立連接傳輸完畢后斷開連接不需要可靠的傳輸數據? 可靠 有確認機制(三次握手) 有確認、窗口、重傳、擁塞控制的機制保證數據可靠傳輸…

itertools拼裝迭代器

itertools拼裝迭代器 連接多個迭代器 內置的itertools模塊有一些函數可以把多個迭代器連城一個使用。 chain chain可以把多個迭代器從頭到尾連成一個迭代器。 import itertoolsit itertools.chain([1, 2, 3], [4, 5, 6]) print(list(it))>>> [1, 2, 3, 4, 5, 6]…

操作視頻號小店,新手最關心的問題,一篇給你講解清楚!

大家好,我是電商小V 新手去做視頻號小店的時候,心里面一定是有很多疑問的,會反復咨詢一些最關心的問題,因為他們要做好準備,以防后續做店過程中出現問題,其實新手關心的問題就那幾個,咱們今天就…

C++貪心算法3

過河的最短時間 #include<bits/stdc.h> using namespace std; void f(int); int n; int main() {system("color 1");cin>>n;int a[10010];for(int i0;i<n;i){cin>>a[i];}sort(a0,an);int ta[1];int k1n-2;int k2n-1;while(true){int t1a[0]a[k…

springboot2+mybatis-plus+vue3創建入門小項目[學生管理系統]02[實戰篇]

創建一個 vue 項目 創建這個新的文件夾 創建前端項目 eggbox 數據庫 SQL CREATE DATABASE IF NOT EXISTS egg DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; USE egg;CREATE TABLE stu (id INT AUTO_INCREMENT, -- 自增主鍵name VARCHAR(64) NOT NULL, -- 非空姓名字段&a…

前端傳參的三種方式

1、params 傳參 參數拼接在地址 url 的后面給后臺&#xff1b;地址欄中可見 案例1 地址欄&#xff1a;https://xxxxxxxx/admin/clues/detail?id558 接口代碼&#xff1a; export function getClueDetail(query: any) {return request<clueItem>({url: /clues/detai…

Java:圖書管理系統

目錄 一.book 1.在book包中的Book 類用來定義和引用書的名字&#xff0c;作者&#xff0c;價格&#xff0c;類型等。 2.在book包中的第二個類是BookList是用來構建書架&#xff0c;和書架上的初始書本&#xff0c; 二、ioperations 1.AddOperation (增加圖書) 2.BorrowOp…

保研機試算法訓練個人記錄筆記(七)

輸入格式&#xff1a; 在第1 行給出不超過10^5 的正整數N, 即參賽&#xff5d;人數。隨后N 行&#xff0c;每行給出一位參賽者的 信息和成績&#xff0c;包括其所代表的學校的編號&#xff08;從1 開始連續編號&#xff09;及其比賽成績&#xff08;百分制&#xff09;&#xf…

Linux環境基礎開發工具的使用(yum,vim,gcc/g++,make/Makefile,gdb)

Linux 軟件包管理器-yum 什么是軟件包及安裝方式 在Linux下安裝軟件, 一個通常的辦法是下載到程序的源代碼, 并進行編譯, 得到可執行程序。 但是這樣太麻煩了, 于是有些人把一些常用的軟件提前編譯好, 做成軟件包(可以理解成windows上的安裝程序)放在一個服務器上, 通過包管理…

數據結構——棧(詳細分析)

目錄 &#x1f349;引言 &#x1f349;棧的本質和特點 &#x1f348;棧的基本操作 &#x1f348;棧的特點 &#x1f34d;后進先出 &#x1f34d;操作受限 &#x1f34d;動態調整 &#x1f348;棧的優缺點 &#x1f34d;優點 &#x1f34d;缺點 &#x1f349;棧的應用…

002 遞歸評論 mongodb websocket消息推送

文章目錄 商品評論CommentController.javaComment.javaCommentServiceImpl.javaCommentRepository.javaCommentService.javaWebSocketConfig.javaWebSocketProcess.javaapplication.yamlproductReview.htmlindex.htmlindex.jsindex.css 訂單評論EvaluateMapper.xmlEvaluateMapp…

從零手寫實現 nginx-01-為什么不能有 java 版本的 nginx?

前言 大家好&#xff0c;我是老馬。很高興遇到你。 作為一個 java 開發者&#xff0c;工作中一直在使用 nginx。卻發現一直停留在使用層面&#xff0c;無法深入理解。 有一天我在想&#xff0c;為什么不能有一個 java 版本的 nginx 呢&#xff1f; 一者是理解 nginx 的設計…

HTTP 協議中 GET 和 POST 有什么區別?分別適用于什么場景?

HTTP 協議中 GET 和 POST 是兩種常用的請求方法&#xff0c;它們的區別如下: 1. 參數傳遞方式不同 GET 請求參數是在 URL 中以鍵值對的形式傳遞的&#xff0c;例如:http://www.example.com/&#xff1f;key1value1&k ey2value2。 而 POST 請求參數是在請求體中以鍵值對的…

SQOOP詳細講解

SQOOP安裝及使用 SQOOP安裝及使用SQOOP安裝1、上傳并解壓2、修改文件夾名字3、修改配置文件4、修改環境變量5、添加MySQL連接驅動6、測試準備MySQL數據登錄MySQL數據庫創建student數據庫切換數據庫并導入數據另外一種導入數據的方式使用Navicat運行SQL文件導出MySQL數據庫impo…

數據訪問與Spring Data JPA

數據訪問與Spring Data JPA 在現代Java應用程序中&#xff0c;持久化數據是核心功能之一。Spring Data JPA&#xff08;Java Persistence API&#xff09;為開發者提供了一種簡單且高效的方式來訪問和操作數據庫。在本博文中&#xff0c;我將向您展示如何使用Spring Data JPA來…

數據結構------二叉樹經典習題2

博主主頁: 碼農派大星. 關注博主帶你了解更多數據結構知識 1.非遞歸的前序遍歷 1.用棧來實現 2,前序遍歷是根左右, 先是根節點入棧,,然后不為空時向左遍歷,當為空時就返回向右遍歷,右為空時直接出棧,依次循環即可. public void preOrderNot(TreeNode root){Stack<TreeNo…

科技賦能,打破視障人士的溝通壁壘

在探索如何增強盲人群體的社會參與度與幸福感的旅程中&#xff0c;盲人社交能力提升策略成為了不容忽視的一環。隨著科技的不斷進步&#xff0c;像“蝙蝠避障”這樣的輔助軟件&#xff0c;不僅在日常出行中為盲人提供了實時避障和拍照識別的便利&#xff0c;也在無形中為他們拓…

華為數通 HCIP-Datacom(H12-821)題庫

最新 HCIP-Datacom&#xff08;H12-821&#xff09;完整題庫請掃描上方二維碼訪問&#xff0c;持續更新中。 BGP路由的Update消息中可不包含以下哪些屬性&#xff1f; A、Local Preference B、AS Path C、MED D、Origin 答案&#xff1a;AC 解析&#xff1a;as-path和ori…