ArkUI調(diào)用Java PA,使用Java FA的Webview組件
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
1.業(yè)務(wù)實(shí)踐背景:
聲明式UI開發(fā)框架(ArkUI),沒有WebView組件,如何從ArkUI從發(fā)起調(diào)用Java PA從Java的PA跳轉(zhuǎn)到Java的FA,使用Java FA的WebView組件?
2.業(yè)務(wù)實(shí)現(xiàn)邏輯
2.1 建立ets的工程,使用api 7.0 構(gòu)建;
2.2 ArkUI的初始界面添加onClick點(diǎn)擊事件,從ArkUI發(fā)起對(duì)Java PA(Service Ability)的調(diào)用;
UI視圖如下:

構(gòu)建ets視圖代碼如下:

2.3 ArkUI調(diào)用Java PA(Service Ability)機(jī)制:

通過FeatureAbility.callAbility({}),呼叫后臺(tái)定義的Java PA(Service Ability),目前有兩種機(jī)制可以實(shí)現(xiàn)。
方舟開發(fā)框架-基于JS擴(kuò)展的類Web開發(fā)范式框架提供了一種FA(JS API)調(diào)用PA(Java API)的機(jī)制,包含遠(yuǎn)端調(diào)用Ability和本地調(diào)用Internal Ability兩種方式。
FA提供了以下三個(gè)JS接口:
FeatureAbility.callAbility(OBJECT):調(diào)用PA能力
FeatureAbility.subscribeAbilityEvent(OBJECT, Function):訂閱PA能力
FeatureAbility.unsubscribeAbilityEvent(OBJECT):取消訂閱PA能力
JS端與Java端通過接口擴(kuò)展機(jī)制進(jìn)行通信,通過bundleName和abilityName來進(jìn)行關(guān)聯(lián)。在FeatureAbility Plugin收到JS調(diào)用請(qǐng)求后,系統(tǒng)根據(jù)開發(fā)者在JS指定的abilityType,Ability或Internal Ability,來選擇對(duì)應(yīng)的方式進(jìn)行處理。開發(fā)者在onRemoteRequest()中實(shí)現(xiàn)PA提供的業(yè)務(wù)邏輯,不同的業(yè)務(wù)通過業(yè)務(wù)碼來區(qū)分。
在PA端提供的接口為:
boolean IRemoteObject.onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option):Ability方式,與FA通過rpc方式通信,該方式的優(yōu)點(diǎn)在于PA可以被不同的FA調(diào)用。
boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option):Internal Ability方式,集成在FA中,適用于與FA業(yè)務(wù)邏輯關(guān)聯(lián)性強(qiáng),響應(yīng)時(shí)延要求高的服務(wù)。該方式僅支持本FA訪問調(diào)用。
2.4 在src的Java目錄下新建Service Ability,截圖如下:

2.5 在Service Ability新建內(nèi)部類WebRemote,繼承RemoteObject,實(shí)現(xiàn)IRemoteBroker接口,具體代碼如下:

第一步: 在onRemoteRequest方法中接受ArkUI傳過來的url,通過ZSONObject解析獲取;
第二步: 在獲取到url后,通過Intent對(duì)象設(shè)置,通過startAbility(intent)啟動(dòng)到Java FA。
2.6 Java FA的布局和具體的Slice中獲取加載WebView組件:


2.7 在config.json文件中配置網(wǎng)絡(luò)訪問權(quán)限:

最后的視圖效果是:

文章相關(guān)附件可以點(diǎn)擊下面的原文鏈接前往下載
https://harmonyos.51cto.com/resource/1589
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

































