ArkUI-X通過Stage模型開發Android端應用指南(二)

StageApplication初始化支持以下三種方式

1. 通過繼承StageApplication的方式進行初始化

import ohos.stage.ability.adapter.StageApplication;public class HiStageApplication extends StageApplication {@Overridepublic void onCreate() {super.onCreate();}
}

2. 繼承Android原生Application方式,在onCreate方法中創建StageApplicationDelegate實例進行初始化

import android.app.Application;
import ohos.stage.ability.adapter.StageApplicationDelegate;public class HiStageApplication extends Application {private StageApplicationDelegate appDelegate_ = null;@Overridepublic void onCreate() {super.onCreate();appDelegate_ = new StageApplicationDelegate();appDelegate_.initApplication(this);}
}

3. 在Activity中創建StageApplicationDelegate實例進行初始化

import android.app.Activity;
import ohos.stage.ability.adapter.StageApplicationDelegate;public class EntryEntryAbilityActivity extends Activity {private StageApplicationDelegate appDelegate_ = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {appDelegate_ = new StageApplicationDelegate();appDelegate_.initApplication(this.getApplication());super.onCreate(savedInstanceState);}
}

通過原生Activity拉起Ability并傳遞參數

使用原生Activity拉起Ability時,需使用原生應用的startActivity方法,參數的傳遞需要通過Intent中的putExtra()進行設置,目前有兩種方式進行參數的傳遞,具體如下:

1. 使用手動方式

參數格式

key值為params
value為json格式

{"params":[{"key":鍵,"type":參數類型值,"value":值},{...}]
}
示例代碼
  • Java
public class EntryEntryAbilityActivity extends AppCompatActivity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = new Intent();intent.setClass(this, EntryEntryAbilityTwoActivity.class);intent.putExtra("params","{\"params\":[{\"key\":\"keyfirst\",\"type\":1,\"value\":\"keyvalue\"}," +"{\"key\":\"keysecond\",\"type\":9,\"value\":\"2.3\"}," +"{\"key\":\"keythird\",\"type\":5,\"value\":\"2\"}," +"{\"key\":\"keyfourth\",\"type\":10,\"value\":\"test\"}]}");startActivity(intent);}
}
  • ArkTS
# xxx.ets
export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {console.log("value = " + want.parameters?.keyfirst)console.log("value = " + want.parameters?.keysecond)console.log("value = " + want.parameters?.keythird)console.log("value = " + want.parameters?.keyfourth)}onWindowStageCreate(windowStage: window.WindowStage): void {...}
...
}
支持的參數類型列表
參數類型參數類型值
boolean1
int5
double9
string10

2. WantParams工具類

推薦使用。

參數格式

putExtra中的key值為"params",對應的value為WantParams字符串。

    WantParams wantParams = new WantParams();wantParams.addValue("key1", "value").addValue("key2", 123).addValue("key3", false)...
示例代碼
  • Java
    此示例展示了在啟動一個新的 Ability 時,如何通過 WantParams 實現參數傳遞。具體涉及使用 WantParams 中的 addValue、getValue 和 toWantParamsString 接口,完成數據的自定義、獲取和修改。
public class MainAbilityActivity extends StageActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = new Intent();intent.setClass(this, EntryEntryAbilityActivity.class);// 設置自定義數據WantParams wantParams = new WantParams();wantParams.addValue("stringKey", "normal").addValue("intKey", -2147483648).addValue("doubleKey", -6.9).addValue("boolKey", true).addValue("arrayKey", new boolean[] { false, true }).addValue("wantParamsKey",new WantParams().addValue("stringKey2", "It's me."));// 獲取指定的鍵對應的值并修改Object obj = wantParams.getValue("stringKey");if (obj instanceof String) {wantParams.setValue("stringKey", "new string value");}obj = wantParams.getValue("intKey");if (obj instanceof Integer) {wantParams.setValue("intKey", 123);}obj = wantParams.getValue("arrayKey");if (obj instanceof boolean[]) {wantParams.setValue("arrayKey", new boolean[] { false, false });}obj = wantParams.getValue("wantParamsKey");if (obj instanceof WantParams) {wantParams.setValue("wantParamsKey", new WantParams().addValue("intKey", 999));}intent.putExtra("params", wantParams.toWantParamsString());startActivity(intent);}
}
  • ArkTS
# xxx.ets
export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {console.log("value = " + want.parameters?.stringKey)console.log("value = " + want.parameters?.intKey)console.log("value = " + want.parameters?.doubleKey)console.log("value = " + want.parameters?.boolKey)console.log("value = " + JSON.stringify(want.parameters?.arrayKey))console.log("value = " + JSON.stringify(want.parameters?.wantParamsKey))}
}
支持的參數類型

WantParams支持的類型有:
boolean、int、float、double、String、WantParams、boolean[]、int[]、float[]、double[]、String[]。
WantParams提供的接口詳細如下:

接口返回值參數功能
addValueWantParamsString key, boolean value為WantParams添加"String"類型的key,"boolean"類型的值value。
addValueWantParamsString key, int value為WantParams添加"String"類型的key,"int"類型的值value。
addValueWantParamsString key, double value為WantParams添加"String"類型的key,"double"類型的值value。
addValueWantParamsString key, String value為WantParams添加"String"類型的key,"String"類型的值value。
addValueWantParamsString key, boolean[] value為WantParams添加"String"類型的key,"boolean[]"類型的值value。
addValueWantParamsString key, int[] value為WantParams添加"String"類型的key,"int[]"類型的值value。
addValueWantParamsString key, double[] value為WantParams添加"String"類型的key,"double[]"類型的值value。
addValueWantParamsString key, String[] value為WantParams添加"String"類型的key,"String[]"類型的值value。
addValueWantParamsString key, WantParams value為WantParams添加"String"類型的key,"WantParams"類型的值value。
getValueObjectString key獲取鍵值為key的屬性值,如果鍵值不存在則返回null。
toWantParamsStringString-將WantParams對象轉換為Json字符串。

注意事項

  • addValue和getValue中的key不能包含特殊字符;如\t、\r、\n等。
  • 在使用手動方式(非WantParams)自定義字符串時,key和value均不能包含特殊字符。
  • array和object不支持使用手動方式進行使用。
  • double的小數點后有效小數位為6位。

用啟動Ability的方式拉起原生Activity

每一個Ability對應一個StageActivity,啟動Ability實際是拉起對應的StageActivity。

所以將原生Activity按照上文中Ability對應StageActivity的規則命名,可以用啟動Ability的方式拉起原生Activity。

// xxx.etslet want: Want = {bundleName: 'com.example.helloworld',moduleName: 'entry', //小寫abilityName: 'Jump', //首字母大寫parameters:{id:1,name:'ArkUI-X'} //可選參數};let context = getContext(this) as common.UIAbilityContext;context.startAbility(want, (err, data) => {}); 
// xxx.java
public class EntryJumpActivity extends AppCompatActivity { //命名:moduleName + abilityName + “Activity”private static final String WANT_PARAMS = "params";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_jump);Intent intent = getIntent();String params = "";if (intent != null) {params = intent.getStringExtra(WANT_PARAMS);}}
}

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

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

相關文章

主從復制的優勢是什么?如好搭建一個主從復制呢?

引言: 最近因為時間緣故,學校,比賽,面試很久沒有更新了,現在開始將會持續更新!!!歐克。我們往下看: 概述: 主從復制是指將主數據庫的DDL和DML操作通過二進制…

Linux Shell腳本中basename和dirname的詳細用法教程

在Linux Shell腳本中,basename和 dirname是兩個非常實用的命令,常用于處理文件路徑和名稱。本文將詳細介紹這兩個命令的用法,并提供豐富的示例代碼,以幫助您更好地理解和應用它們。 一、basename命令 1.1 基本用法 basename命令…

3D世界里的“盜夢空間”!在方塊里再造一個世界?高級特效get?

有沒有想過,游戲里的鏡子、傳送門、或者屏幕上播放的實時3D動畫是怎么實現的? 答案就是一項黑科技——渲染目標(Render Targets)。它允許我們不直接渲染到屏幕,而是“偷偷地”渲染到一張幕后的貼圖上,然后…

淺析一種基于深度學習算法的維吾爾文OCR技術的實現原理及其應用場景

維吾爾文OCR技術是一種基于人工智能和深度學習技術的維吾爾文光學字符識別工具,能夠快速、準確地將印刷體或手寫體維吾爾文轉換為可編輯、可搜索的數字化文本。該技術適用于政府、教育、出版、金融等多個行業,助力維吾爾文信息的高效處理與智能化管理。 …

如何使用MQTTX軟件來進行MQTT協議的測試

下載MQTTX軟件 下載地址及說明文檔開始使用 - MQTTX 文檔,比較詳細 為什么使用MQTTX 何時要使用MQTTX軟件呢?用來檢測物聯網模塊上云的數據就很方便,當然云上如果有日志系統的話也是可以用的。 物聯網模塊,以利爾達模塊為例 NT26-KCN系列…

ELK 和 OpenShift 中的 EFK

ELK 和 OpenShift 中的 EFK 確實是同類日志解決方案的不同實現,核心功能相似但組件略有差異。以下是詳細對比和解釋: 1. ELK vs EFK:核心區別 組件ELK 棧EFK 棧(OpenShift 默認)日志收集Logstash(Java 實現…

Python UDP Socket 實時在線刷卡掃碼POS消費機門禁控制服務端示例源碼

本示例使用的設備:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1bk8Qc9r&ftt&id17021194999 一、服務端綁定IP開啟UDP端口接收消費機提交的請求 import sys import os import socket import time import datetimeIpList[] if sys.pl…

對于高考邊界的理解以及未來就業層級的學習與思考

目錄 一、2024年高考全國多少考生,文化課,文科理科,分別總分多少分?清北得多少分能上?二、1342萬人里面,有多少人能上清北,多少能上985,多少能上211,多少能上二本&#x…

JVM調優實戰 Day 4:JVM類加載機制

【JVM調優實戰 Day 4】JVM類加載機制 文章內容 在Java虛擬機(JVM)的運行過程中,類加載機制是整個程序啟動和運行的基礎。它決定了Java類是如何被動態加載到JVM中,并為后續的字節碼執行做好準備。理解JVM類加載機制不僅有助于我們…

R 語言中的判斷語句

R 語言中的判斷語句 在R語言編程中,判斷語句是執行條件邏輯的基礎。它們允許程序根據特定的條件執行不同的代碼塊。本文將深入探討R語言中的幾種常見判斷語句,包括if語句、if-else語句和switch語句,并探討它們的用法和場景。 1. if語句 if…

從設備自動化到智能管控:MES如何賦能牛奶飲料行業高效生產?

萬界星空科技全新推出的:新一代智能化MES系統,深度融合AI大數據技術,實現生產全流程可視化、智能排產、實時質量追溯與設備互聯,助力企業降本增效30%。 現開放免費試用名額,體驗智能化生產管理的高效與便捷&#xff01…

TDengine 技術參數配置大全

1. 背景 TDengine 的 taos.cfg 中配置項及使用 SQL 命令 alter 修改的系統變量之間的關系如何,哪些是持久存儲項,哪些設置是臨時項,這章將詳細說明。 本文是技術參考資料,請收藏。 2.定義 1. 全局配置參數 全局配置參數&#…

無人機神經網絡模塊運行與技術難點

一、神經網絡模塊的運行方式 1. 分層處理架構 感知層 多模態數據融合:通過八元數卷積網絡(OCNN)統一處理LiDAR、攝像頭、IMU等異構傳感器數據,將點云坐標(x/y/z)、圖像RGB與光流信息編碼至8維虛部&#…

前端react框架實現打包時間動態加入配置展示在指定頁面

注意: 當前方法特定為 create-react-app 構建框架,其他的構建流程不同,不能直接照搬 react-scripts 的方式。 ? 目標: 在 React 打包(build)時,自動將當前時間寫入代碼中某個變量或 console…

原子操作(CAS)

原子操作 原子操作原理什么是原子操作?原子性原子變量相關接口內存序 shared_ptr的實現 原子操作原理 什么是原子操作? 原子操作其實就是指在多線程的環境下,確保對共享變量的操作不會被干擾,從而避免了競態條件。 我們都知道&…

馬克思主義基本原理期末復習下

二十、資本的原始積累 所謂資本原始積累,就是以暴力手段使生產者與生產資料分離資本快速集中于少數人手中,資本主義得以快速發展的歷史過程。具體過程其一,用暴力手段奪取農民的土地,如英國圈地運動在國外建立殖民地,…

體育數據api接口,足球api籃球api電競api,比賽賽事數據api

在體育行業,數據驅動一切,從內容分發到競猜預測,從用戶互動到商業變現,背后少不了一個關鍵詞:數據接口(API)。無論是實時比分、比賽事件、歷史統計,還是球員詳情、戰績排名&#xff…

Harmony 狀態監聽 @Monitor和@Computed

Monitor與Computed裝飾器在ArkUI狀態管理中的協同應用 一、裝飾器概述 1. Monitor裝飾器 Monitor是ArkUI狀態管理V2中的核心裝飾器,用于深度監聽狀態變量的修改: 支持監聽嵌套類屬性、多維數組項和對象數組中的指定項變化能夠獲取變化前后的值進行比…

同濟大學多模態感知具身導航全面綜述

作者: I-Tak Ieong, Hao Tang 單位:同濟大學計算機學院,北京大學計算機學院 論文標題: Multimodal Perception for Goal-oriented Navigation: A Survey 論文鏈接:https://arxiv.org/pdf/2504.15643 主要貢獻 基于…

2025年CCF先進音頻技術競賽

由中國計算機學會主辦、CCF語音對話與聽覺專委會承辦、語音之家協辦、華為終端有限公司贊助的CCF先進音頻技術大賽正式啟動。大賽旨在推動國內高等院校及科研院所在音頻技術領域的專業人才培養,支持學生科技創新,選拔優秀人才。 賽事官網:ht…