HarmonyOS中實現頁面跳轉的方法匯總
–1. 不同Slice間跳轉,同一個Ability中,優點是方便,高效,缺點是業務邏輯復雜度受限;
- button.setClickedListener(
- listener -> present(new SecondAbilitySlice(), new Intent())
- );
–2. 使用Intent借助于ElementName,最常用的頁面跳轉方式,方便傳遞參數以及實現相對復雜的業務邏輯交互;
- ElementName elementName = new ElementName(……);
- intent.setElement(elementName);
- intent.setParam(……);
- startAbility(intent);
–3. 借助于Operation,可實現跨應用頁面跳轉;
- Intent intent = new Intent();
- Operation operation = new Intent.OperationBuilder()
- .withDeviceId("")
- .withBundleName("com.demoapp")
- .withAbilityName("com.demoapp.FooAbility")
- .build();
- intent.setOperation(operation);
- startAbility(intent);
–4. Rout路由(JS),調用router.push()接口將uri指定的頁面添加到路由棧中,即跳轉到uri指定的頁面。在調用router方法之前,需要導入router模塊。
調用router.push()路由到詳情頁;調用router.back()回到首頁;
- // index.js
- import router from '@system.router';
- export default {
- launch() {
- router.push ({
- uri: 'pages/detail/detail',
- });
- },
- }
- // detail.js
- import router from '@system.router';
- export default {
- launch() {
- router.back();
- },
- }
–5. 通過遷移實現分布式設備間頁面傳遞(有請求遷移和請求回遷兩種操作)
1)需實現IAbilityContinuation接口
2)需要權限
- ohos.permission.GET_DISTRIBUTED_DEVICE_INFO:用于允許獲取分布式組網內的設備列表和設備信息
- ohos.permission.DISTRIBUTED_DATASYNC:用于允許不同設備間的數據交換
- ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE:用于允許監聽分布式組網內的設備狀態變化
- ohos.permission.READ_USER_STORAGE:讀取存儲卡中的內容
- ohos.permission.WRITE_USER_STORAGE:修改或刪除存儲卡中的內容
- ohos.permission.GET_BUNDLE_INFO:用于查詢其他應用的信息
- ohos.permission.servicebus.ACCESS_SERVICE:分布式數據傳輸的權限
- com.huawei.hwddmp.servicebus.BIND_SERVICE:系統應用使用權限
3)需要獲取分布式設備ID(NetworkID)
核心服務類:IContinuationRegisterManager
服務類的常用API方法:
getContinuationRegisterManager();獲取服務類的對象
register();注冊服務
showDeviceList();獲取設備列表
unregister();注銷服務
4)請求遷移關鍵步驟(假定設備A向設備B遷移)
需要遷移的page實現IAbilityContinuation接口
復寫onStartContinuation()方法,做遷移前的準備工作
復寫onSaveData()方法,保存遷移數據
在設備B上復寫onRestoreData()方法,恢復遷移數據
在設備A上復寫onCompleteContinuation()方法,做遷移后的收尾工作
調用continueAbility()或continueAbilityReversibly()發起遷移
5)請求回遷需在設備A上調用reverseContinueAbility()請求回遷
以下關鍵步驟類似4)