当前栏目
ArkUI调用Java PA,使用Java FA的Webview组件
1.业务实践背景:
声明式UI开发框架(ArkUI),没有WebView组件,如何从ArkUI从发起调用Java PA从Java的PA跳转到Java的FA,使用Java FA的WebView组件?
2.业务实现逻辑
2.1 建立ets的工程,使用api 7.0 构建;
2.2 ArkUI的初始界面添加onClick点击事件,从ArkUI发起对Java PA(Service Ability)的调用;
UI视图如下:
![#星光计划2.0# ArkUI 调用Java PA,使用Java FA的Webview组件-鸿蒙HarmonyOS技术社区](https://s6.51cto.com/oss/202112/17/c79dccd801e9b4d155710d9a5f6d28b7.jpg)
构建ets视图代码如下:
![#星光计划2.0# ArkUI 调用Java PA,使用Java FA的Webview组件-鸿蒙HarmonyOS技术社区](https://s4.51cto.com/oss/202112/17/2223208a5506045d38a5f90ef2630b00.jpg)
2.3 ArkUI调用Java PA(Service Ability)机制:
![#星光计划2.0# ArkUI 调用Java PA,使用Java FA的Webview组件-鸿蒙HarmonyOS技术社区](https://s2.51cto.com/oss/202112/17/d713bc129325c9ebdd6609b5ee33cfb2.jpg)
通过FeatureAbility.callAbility({}),呼叫后台定义的Java PA(Service Ability),目前有两种机制可以实现。
方舟开发框架-基于JS扩展的类Web开发范式框架提供了一种FA(JS API)调用PA(Java API)的机制,包含远端调用Ability和本地调用Internal Ability两种方式。
FA提供了以下三个JS接口:
FeatureAbility.callAbility(OBJECT):调用PA能力
FeatureAbility.subscribeAbilityEvent(OBJECT, Function):订阅PA能力
FeatureAbility.unsubscribeAbilityEvent(OBJECT):取消订阅PA能力
JS端与Java端通过接口扩展机制进行通信,通过bundleName和abilityName来进行关联。在FeatureAbility Plugin收到JS调用请求后,系统根据开发者在JS指定的abilityType,Ability或Internal Ability,来选择对应的方式进行处理。开发者在onRemoteRequest()中实现PA提供的业务逻辑,不同的业务通过业务码来区分。
在PA端提供的接口为:
boolean IRemoteObject.onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option):Ability方式,与FA通过rpc方式通信,该方式的优点在于PA可以被不同的FA调用。
boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option):Internal Ability方式,集成在FA中,适用于与FA业务逻辑关联性强,响应时延要求高的服务。该方式仅支持本FA访问调用。
2.4 在src的Java目录下新建Service Ability,截图如下:
![#星光计划2.0# ArkUI 调用Java PA,使用Java FA的Webview组件-鸿蒙HarmonyOS技术社区](https://s6.51cto.com/oss/202112/17/7bfbeb8792e56ccd30067d6daf15ce97.jpg)
2.5 在Service Ability新建内部类WebRemote,继承RemoteObject,实现IRemoteBroker接口,具体代码如下:
![#星光计划2.0# ArkUI 调用Java PA,使用Java FA的Webview组件-鸿蒙HarmonyOS技术社区](https://s6.51cto.com/oss/202112/17/48ed5173b042915174088cb0393a7cb0.jpg)
第一步: 在onRemoteRequest方法中接受ArkUI传过来的url,通过ZSONObject解析获取;
第二步: 在获取到url后,通过Intent对象设置,通过startAbility(intent)启动到Java FA。
2.6 Java FA的布局和具体的Slice中获取加载WebView组件:
![#星光计划2.0# ArkUI 调用Java PA,使用Java FA的Webview组件-鸿蒙HarmonyOS技术社区](https://s5.51cto.com/oss/202112/17/9f5b23d8e291b61c14e014f46f972aa3.jpg)
![#星光计划2.0# ArkUI 调用Java PA,使用Java FA的Webview组件-鸿蒙HarmonyOS技术社区](https://s2.51cto.com/oss/202112/17/85fe5c58f89c4b30dcdd4fca4209e89d.jpg)
2.7 在config.json文件中配置网络访问权限:
![#星光计划2.0# ArkUI 调用Java PA,使用Java FA的Webview组件-鸿蒙HarmonyOS技术社区](https://s5.51cto.com/oss/202112/17/f121678c39ab7588972c25dfa2df213e.jpg)
最后的视图效果是:
![#星光计划2.0# ArkUI 调用Java PA,使用Java FA的Webview组件-鸿蒙HarmonyOS技术社区](https://s6.51cto.com/oss/202112/17/b355749fb20a71e4200e71b012a9a8ac.jpg)
文章相关附件可以点击下面的原文链接前往下载
https://harmonyos.51cto.com/resource/1589
相关文章
- 前端面试 【JavaScript】— typeof 是否能正确判断类型?
- 前端面试 【JavaScript】— instanceof 能否判断基本数据类型?
- 前端面试 【JavaScript】— 能不能手动实现一下 instanceof 的功能?
- 前端面试 【JavaScript】— Object.is和=== 有什么区别?
- 前端面试 【JavaScript】— JS中类型转换有哪几种?
- 前端面试 【JavaScript】— == 和 ===有什么区别?
- 前端面试 【JavaScript】— 对象转原始类型是根据什么流程运行的?
- JavaScript 的 parseInt() 函数
- javascript实现两个数字进行组合
- JS监听键盘按键
- 大前端开发中的路由管理之五:Flutter篇
- Javascript的DOM操作
- 在Vue项目中使用WebSocket技术
- 新手向:前端程序员必学基本技能——调试JS代码
- React 毁了 Web 开发!
- 「JS 逆向百例」cnki 学术翻译 AES 加密分析
- 商标注册域名后缀用什么?商标和域名有哪些区别?
- 网站建设流程是怎样的?需要看重哪些细节?
- 网站域名商标注册流程是什么?网站域名商标有什么用?
- 如何建设一个实用性强的网站 网站上线后如何运营