Intent
基本概念
Intent 是對(duì)象之間傳遞信息的載體。例如,當(dāng)一個(gè) Ability 需要啟動(dòng)另一個(gè) Ability 時(shí),或者一個(gè) AbilitySlice 需要導(dǎo)航到另一個(gè) AbilitySlice 時(shí),可以通過(guò) Intent 指定啟動(dòng)的目標(biāo)同時(shí)攜帶相關(guān)數(shù)據(jù)。Intent 的構(gòu)成元素包括 Operation 與 Parameters,具體描述參見(jiàn)表 1。
表 1 Intent 的構(gòu)成元素 當(dāng) Intent 用于發(fā)起請(qǐng)求時(shí),根據(jù)指定元素的不同,分為兩種類型:
如果同時(shí)指定了 BundleName 與 AbilityName,則根據(jù) Ability 的全稱(例如 “com.demoapp.FooAbility”)來(lái)直接啟動(dòng)應(yīng)用。
如果未同時(shí)指定 BundleName 和 AbilityName,則根據(jù) Operation 中的其他屬性來(lái)啟動(dòng)應(yīng)用。
說(shuō)明 Intent 設(shè)置屬性時(shí),必須先使用 Operation 來(lái)設(shè)置屬性。如果需要新增或修改屬性,必須在設(shè)置 Operation
后再執(zhí)行操作。
關(guān)于 Intent 最簡(jiǎn)單的使用方法,可參見(jiàn)快速入門的示例代碼。其中 “實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)” 重點(diǎn)描述了使用 Intent 實(shí)現(xiàn)兩個(gè)頁(yè)面跳轉(zhuǎn)關(guān)系的操作。
根據(jù) Ability 的全稱啟動(dòng)應(yīng)用
通過(guò)構(gòu)造包含 BundleName 與 AbilityName 的 Operation 對(duì)象,可以啟動(dòng)一個(gè) Ability、并導(dǎo)航到該 Ability。示例代碼如下:
Intent intent = new Intent(); // 通過(guò)Intent中的OperationBuilder類構(gòu)造operation對(duì)象,指定設(shè)備標(biāo)識(shí)(空串表示當(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);
作為處理請(qǐng)求的對(duì)象,會(huì)在相應(yīng)的回調(diào)方法中接收請(qǐng)求方傳遞的 Intent 對(duì)象。以導(dǎo)航到另一個(gè) Ability 為例,導(dǎo)航的目標(biāo) Ability 可以在其 onStart () 回調(diào)的參數(shù)中獲得 Intent 對(duì)象。 根據(jù) Operation 的其他屬性啟動(dòng)應(yīng)用 有些場(chǎng)景下,開發(fā)者需要在應(yīng)用中使用其他應(yīng)用提供的某種能力,而不感知提供該能力的具體是哪一個(gè)應(yīng)用。例如開發(fā)者需要通過(guò)瀏覽器打開一個(gè)鏈接,而不關(guān)心用戶最終選擇哪一個(gè)瀏覽器應(yīng)用,則可以通過(guò) Operation 的其他屬性(除 BundleName 與 AbilityName 之外的屬性)描述需要的能力。如果設(shè)備上存在多個(gè)應(yīng)用提供同種能力,系統(tǒng)則彈出候選列表,由用戶選擇由哪個(gè)應(yīng)用處理請(qǐng)求。以下示例展示使用 Intent 跨 Ability 查詢天氣信息。
請(qǐng)求方
在 Ability 中構(gòu)造 Intent 以及包含 Action 的 Operation 對(duì)象,并調(diào)用 startAbilityForResult () 方法發(fā)起請(qǐng)求。然后重寫 onAbilityResult () 回調(diào)方法,對(duì)請(qǐng)求結(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、作為處理請(qǐng)求的對(duì)象,首先需要在配置文件中聲明對(duì)外提供的能力,以便系統(tǒng)據(jù)此找到自身并作為候選的請(qǐng)求處理者。
{ "module": { ... "abilities": [ { ... "skills":[ { "actions":[ "ability.intent.QUERY_WEATHER" ] } ] ... } ] ... } ... }
2、在 Ability 中配置路由以便支持以此 action 導(dǎo)航到對(duì)應(yīng)的 AbilitySlice。
@Override protected void onStart(Intent intent) { ... addActionRoute(Intent.ACTION_QUERY_WEATHER, DemoSlice.class.getName()); ... }
3、在 Ability 中處理請(qǐng)求,并調(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)注
80文章
2126瀏覽量
33065
發(fā)布評(píng)論請(qǐng)先 登錄
【HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實(shí)踐

【 HarmonyOS 5 入門系列 】鴻蒙HarmonyOS示例項(xiàng)目講解

HarmonyOS入門指南
華為正式啟動(dòng)HarmonyOS 6開發(fā)者Beta
HarmonyOS 代碼工坊的指尖開發(fā),讓 APP 開發(fā)所見(jiàn)即所得

HarmonyOS基礎(chǔ)組件:Button三種類型的使用

【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗(yàn)】+ 入門篇學(xué)習(xí)
HarmonyOS 應(yīng)用開發(fā)賦能套件:鴻蒙原生應(yīng)用開發(fā)的 “神助攻”
名單公布!【書籍評(píng)測(cè)活動(dòng)NO.56】極速探索HarmonyOS NEXT:純血鴻蒙應(yīng)用開發(fā)實(shí)踐
《HarmonyOS第一課》煥新升級(jí),賦能開發(fā)者快速掌握鴻蒙應(yīng)用開發(fā)
HarmonyOS開發(fā)指導(dǎo)類文檔更新速遞(下)

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

HarmonyOS開發(fā)寶典震撼來(lái)襲,卓越應(yīng)用開發(fā)之旅一觸即發(fā),輕松啟程!
HarmonyOS NEXT應(yīng)用元服務(wù)開發(fā)Intents Kit(意圖框架服務(wù))習(xí)慣推薦方案概述
北京迅為RK3568開發(fā)板嵌入式學(xué)習(xí)之Linux驅(qū)動(dòng)全新更新-CAN+

評(píng)論