Intent
基本概念
Intent 是對象之間傳遞信息的載體。例如,當(dāng)一個 Ability 需要啟動另一個 Ability 時,或者一個 AbilitySlice 需要導(dǎo)航到另一個 AbilitySlice 時,可以通過 Intent 指定啟動的目標(biāo)同時攜帶相關(guān)數(shù)據(jù)。Intent 的構(gòu)成元素包括 Operation 與 Parameters,具體描述參見表 1。
表 1 Intent 的構(gòu)成元素 當(dāng) Intent 用于發(fā)起請求時,根據(jù)指定元素的不同,分為兩種類型:
如果同時指定了 BundleName 與 AbilityName,則根據(jù) Ability 的全稱(例如 “com.demoapp.FooAbility”)來直接啟動應(yīng)用。
如果未同時指定 BundleName 和 AbilityName,則根據(jù) Operation 中的其他屬性來啟動應(yīng)用。
說明 Intent 設(shè)置屬性時,必須先使用 Operation 來設(shè)置屬性。如果需要新增或修改屬性,必須在設(shè)置 Operation
后再執(zhí)行操作。
關(guān)于 Intent 最簡單的使用方法,可參見快速入門的示例代碼。其中 “實(shí)現(xiàn)頁面跳轉(zhuǎn)” 重點(diǎn)描述了使用 Intent 實(shí)現(xiàn)兩個頁面跳轉(zhuǎn)關(guān)系的操作。
根據(jù) Ability 的全稱啟動應(yīng)用
通過構(gòu)造包含 BundleName 與 AbilityName 的 Operation 對象,可以啟動一個 Ability、并導(dǎo)航到該 Ability。示例代碼如下:
Intent intent = new Intent(); // 通過Intent中的OperationBuilder類構(gòu)造operation對象,指定設(shè)備標(biāo)識(空串表示當(dāng)前設(shè)備)、應(yīng)用包名、Ability名稱 Operation operation = new Intent.OperationBuilder() .withDeviceId("") .withBundleName("com.demoapp") .withAbilityName("com.demoapp.FooAbility") .build(); // 把operation設(shè)置到intent中 intent.setOperation(operation); startAbility(intent);
作為處理請求的對象,會在相應(yīng)的回調(diào)方法中接收請求方傳遞的 Intent 對象。以導(dǎo)航到另一個 Ability 為例,導(dǎo)航的目標(biāo) Ability 可以在其 onStart () 回調(diào)的參數(shù)中獲得 Intent 對象。 根據(jù) Operation 的其他屬性啟動應(yīng)用 有些場景下,開發(fā)者需要在應(yīng)用中使用其他應(yīng)用提供的某種能力,而不感知提供該能力的具體是哪一個應(yīng)用。例如開發(fā)者需要通過瀏覽器打開一個鏈接,而不關(guān)心用戶最終選擇哪一個瀏覽器應(yīng)用,則可以通過 Operation 的其他屬性(除 BundleName 與 AbilityName 之外的屬性)描述需要的能力。如果設(shè)備上存在多個應(yīng)用提供同種能力,系統(tǒng)則彈出候選列表,由用戶選擇由哪個應(yīng)用處理請求。以下示例展示使用 Intent 跨 Ability 查詢天氣信息。
請求方
在 Ability 中構(gòu)造 Intent 以及包含 Action 的 Operation 對象,并調(diào)用 startAbilityForResult () 方法發(fā)起請求。然后重寫 onAbilityResult () 回調(diào)方法,對請求結(jié)果進(jìn)行處理。
private void queryWeather() { Intent intent = new Intent(); Operation operation = new Intent.OperationBuilder() .withAction(Intent.ACTION_QUERY_WEATHER) .build(); intent.setOperation(operation); startAbilityForResult(intent, REQ_CODE_QUERY_WEATHER); } @Override protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) { switch (requestCode) { case REQ_CODE_QUERY_WEATHER: // Do something with result. ... return; default: ... } }
處理方 1、作為處理請求的對象,首先需要在配置文件中聲明對外提供的能力,以便系統(tǒng)據(jù)此找到自身并作為候選的請求處理者。
{ "module": { ... "abilities": [ { ... "skills":[ { "actions":[ "ability.intent.QUERY_WEATHER" ] } ] ... } ] ... } ... }
2、在 Ability 中配置路由以便支持以此 action 導(dǎo)航到對應(yīng)的 AbilitySlice。
@Override protected void onStart(Intent intent) { ... addActionRoute(Intent.ACTION_QUERY_WEATHER, DemoSlice.class.getName()); ... }
3、在 Ability 中處理請求,并調(diào)用 setResult () 方法暫存返回結(jié)果。
@Override protected void onActive() { ... Intent resultIntent = new Intent(); setResult(0, resultIntent); //0為當(dāng)前Ability銷毀后返回的resultCode。 ... } 審核編輯 黃宇
-
HarmonyOS
+關(guān)注
關(guān)注
79文章
2027瀏覽量
32079
發(fā)布評論請先 登錄
HarmonyOS5云服務(wù)技術(shù)分享--ArkTS開發(fā)Node環(huán)境
【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗(yàn)】+ 入門篇學(xué)習(xí)
HarmonyOS 應(yīng)用開發(fā)賦能套件:鴻蒙原生應(yīng)用開發(fā)的 “神助攻”
華為推出HarmonyOS應(yīng)用開發(fā)賦能套件
名單公布!【書籍評測活動NO.56】極速探索HarmonyOS NEXT:純血鴻蒙應(yīng)用開發(fā)實(shí)踐
HarmonyOS NEXT 應(yīng)用開發(fā)練習(xí):智能視頻推薦
《HarmonyOS第一課》煥新升級,賦能開發(fā)者快速掌握鴻蒙應(yīng)用開發(fā)
HarmonyOS開發(fā)指導(dǎo)類文檔更新速遞(下)

HarmonyOS開發(fā)指導(dǎo)類文檔更新速遞(上)

AICon北京站HarmonyOS技術(shù)分論壇開啟招募,歡迎開發(fā)者踴躍報名

HarmonyOS開發(fā)寶典震撼來襲,卓越應(yīng)用開發(fā)之旅一觸即發(fā),輕松啟程!
HarmonyOS NEXT應(yīng)用元服務(wù)開發(fā)Intents Kit(意圖框架服務(wù))習(xí)慣推薦方案概述
AWTK 最新動態(tài):支持鴻蒙系統(tǒng)(HarmonyOS Next)

北京迅為RK3568開發(fā)板嵌入式學(xué)習(xí)之Linux驅(qū)動全新更新-CAN+

慶科信息獲HarmonyOS高級應(yīng)用開發(fā)能力認(rèn)證!助力品牌快速打造鴻蒙原生應(yīng)用

評論