鴻蒙系統中Intent的使用
官方文件解釋
Intent常用用於頁面跳轉或者模組之間跳轉時使用的工具,通常頁面之間傳遞資訊需要用到這個,那麼首先我們來開下官方是怎麼定義的
基本概念
Intent是物件之間傳遞資訊的載體。例如,當一個Ability需要啟動另一個Ability時,或者一個AbilitySlice需要導航到另一個AbilitySlice時,可以通過Intent指定啟動的目標同時攜帶相關資料。Intent的構成元素包括Operation與Parameters,具體描述參見表1。
當Intent用於發起請求時,根據指定元素的不同,分為兩種型別:
- 如果同時指定了BundleName與AbilityName,則根據Ability的全稱(例如,“com.demoapp.FooAbility”)來直接啟動應用。
- 如果未同時指定BundleName和AbilityName,則根據Operation中的其他屬性來啟動應用。
話不多說,我們直接在案例中探尋
案例
指定BundleName與AbilityName實現跳轉
這個是最常用的一種跳轉方法,在之前部落格“開發鴻蒙的第一個Hello World的Java頁面以及頁面間跳轉功能實現”中已經提到過,這裡就不重複講
未指定BundleName和AbilityName實現跳轉
這種方法可以實現一個應用呼叫另一個應用的能力,類似於手機上有多個瀏覽器,當開啟連結時可以挑選某一個瀏覽器開啟,具體操作如下
被呼叫應用改造
新建被呼叫應用wear4
在DevEco Studio中我們點選file->new->new project
輸入專案名稱為wear4
新建DemoAbilitySlice
在slice將MainAbilitySlice複製貼上一下,將新檔名稱改為DemoAbilitySlice
將DemoAbilitySlice頁面顯示的文字改為“wear demo”
MainAbility中新增路由
MainAbility 如下:
public class MainAbility extends Ability {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setMainRoute(MainAbilitySlice.class.getName());
addActionRoute(Intent.ACTION_QUERY_WEATHER, DemoAbilitySlice.class.getName());
}
}
config.json改造
作為處理請求的物件,首先需要在配置檔案中宣告對外提供的能力,以便系統據此找到自身並作為候選的請求處理者
呼叫應用改造
我們的呼叫應用為wear22,其新建過程參考前面部落格“開發鴻蒙的第一個Hello World的Java頁面以及頁面間跳轉功能實現”
改造MainAbilitySlice
在MainAbilitySlice中,首先定義一個全域性變數
private static final int REQ_CODE_QUERY_WEATHER = 000000;
新建queryWeather方法用於呼叫其它應用
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);
}
這裡我們發現沒有使用withBundleName和withAbilityName,而是使用.withAction(Intent.ACTION_QUERY_WEATHER),有這個配置後就會搜尋有相關配置的相關頁面
改造onAbilityResult方法
接下來我們改造onAbilityResult方法用於返回時呼叫
@Override
protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {
switch (requestCode) {
case REQ_CODE_QUERY_WEATHER:
return;
default:
}
}
按鈕監聽呼叫queryWeather()
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_main_layout); // 載入XML佈局
Button button = (Button) findComponentById(ResourceTable.Id_button);
if (button != null) {
// 為按鈕設定點選回撥
button.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
queryWeather();
}
});
}
}
斷點除錯
呼叫與被呼叫方打斷點
我們在wear4的DemoAbilitySlice的onActive打上斷點
在wear22的MainAbilitySlice的onAbilityResult方法內打上斷點
以debug方式啟動兩個應用
手錶模擬器啟動後,分別以debug方式啟動兩個應用
回到wear22主頁面
點選圓圈回到主頁,然後點選圓圈到應用列表,進入wear22應用
點選除錯
點選按鈕,可以看到執行緒進入wear4專案中DemoAbilitySlice的onActive斷點中了,按F9後執行緒跑下去,再看手錶,頁面跳轉到DemoAbilitySlice中去了
點選返回按鈕
執行緒又執行到wear22專案中MainAbilitySlice的onAbilityResult的斷點中去了
且頁面回到了wear22主頁面了
總結:1.Intent的Operation可以實現不指定特定包和特定AbilityName就能是是實現跳轉,只需要配置withAction,然後startAbilityForResult實現跳轉
2.同時被呼叫的應用的配置檔案中宣告對外提供的能力
3.跳轉後會呼叫被呼叫頁面的onActive()方法
4.當返回後,會呼叫回掉方法onAbilityResult
相關文章
- 鴻蒙系統中的 JS 開發框架鴻蒙JS框架
- 鴻蒙系統系列教程1-鴻蒙系統的發展史鴻蒙
- 鴻蒙系統和安卓的區別 鴻蒙系統是基於安卓嗎鴻蒙安卓
- 鴻蒙系統超級終端怎麼使用?鴻蒙系統超級終端開啟教程鴻蒙
- Android中Intent概述及使用AndroidIntent
- 鴻蒙系統嚐鮮鴻蒙
- Android中的intentAndroidIntent
- 鴻蒙系統系列教程6-鴻蒙系統專案結構解析鴻蒙
- 逐行分析鴻蒙系統的 JavaScript 框架鴻蒙JavaScript框架
- 鴻蒙系統系列教程2-鴻蒙OS系統分散式操作講解鴻蒙分散式
- 華為鴻蒙系統怎麼補電?華為鴻蒙系統手機補電的操作方法鴻蒙
- 鴻蒙系統系列教程5-鴻蒙開發環境的搭建鴻蒙開發環境
- 鴻蒙OS的系統呼叫是如何實現的? | 解讀鴻蒙原始碼鴻蒙原始碼
- 鴻蒙系統什麼時候能用 鴻蒙系統有什麼特別之處鴻蒙
- 【筆記】【Android】Manifest中的intent-filter使用筆記AndroidIntentFilter
- 鴻蒙系統系列教程3-鴻蒙OS的技術特徵講解鴻蒙特徵
- 鴻蒙作業系統特點鴻蒙作業系統
- 從0系統學Android-2.3使用 Intent 在 Activity 之間穿梭AndroidIntent
- 鴻蒙系統超級終端是幹什麼用的?鴻蒙系統超級終端的作用詳解鴻蒙
- 一文讀懂鴻蒙系統與安卓系統的區別鴻蒙安卓
- 鴻蒙系統freeModbusTcp移植簡介鴻蒙TCP
- 使用Intent傳遞物件Intent物件
- 鴻蒙系統(OpenHarmony HarmonyOS):面向全場景的分散式作業系統鴻蒙分散式作業系統
- 華為鴻蒙系統HarmonyOS學習之十:鴻蒙HarmonyOS微核心技術鴻蒙
- 聊聊鴻蒙系統與開發者生態前景鴻蒙
- OS-鴻蒙系統-以及編譯器鴻蒙編譯
- 鴻蒙系統應用基礎開發鴻蒙
- 成為自己(二):鴻蒙 Harmony 系統篇鴻蒙
- Activity配置檔案中的intent-filterIntentFilter
- 為什麼谷歌不起訴華為的鴻蒙系統?谷歌鴻蒙
- 鴻蒙系統(HarmonyOS)全域性彈窗實現鴻蒙
- Android中Intent物件與Intent Filter過濾匹配過程詳解AndroidIntent物件Filter
- 鴻蒙 Next 密碼管理綜合案例:打造安全便捷的使用者認證系統鴻蒙密碼
- Android中Intent的setData,setType和setDataAndType的用法AndroidIntent
- Android Intent Flag組合使用AndroidIntent
- Android學習筆記02——Intent的使用Android筆記Intent
- IntentIntent
- linux系統中xargs命令的使用方式Linux