专栏名称: 51CTO技术栈
有趣 | 有料 | 有内涵,为您提供最优质的内容,愿我们一起悦享技术,成就人生。
目录
相关文章推荐
51好读  ›  专栏  ›  51CTO技术栈

鸿蒙系统中JS与Java如何进行混合开发?

51CTO技术栈  · 公众号  · 程序员  · 2021-01-25 18:05

正文

在进行鸿蒙应用开发中由于每个人的开发习惯不同,鸿蒙官方文档说明中也是支持多种开发方式,今天跟大家聊聊关于 JS 跟 Java 之间混合开发方式。



01

基本介绍


首先是因为我个人习惯使用 JS 进行页面开发布局,但是鸿蒙提供的 Java API 的功能比 JS API 的功能要强大,所以我选择用 JS 开发页面用 Java 实现逻辑交互。


那么这两者之间如何进行通信就是我们需要考虑的问题, 好在官方文档中有关于 JS API 调用 Java API 机制的说明。


FA 提供了三个 JS 接口分别为:

  • FeatureAbility.callAbility(OBJECT): 调用 PA 能力。

  • FeatureAbility.subscribeAbilityEvent(OBJECT, Function): 订阅 PA 能力。

  • FeatureAbility.unsubscribeAbilityEvent(OBJECT): 取消订阅 PA 能力。


在 PA 端也有对应的接口其包含远端调用 Ability 和本地调用 Internal Ability 两种方式。


PA 端调用 Ability 接口方式为:
boolean IRemoteObject.onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option);

PA 端调用 Internal Ability 接口方式为:
boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option)

JS 端与 Java 通过接口扩展机制进行通信,通过 bundleName 和 abilityName 进行关联,所以我们要建立两者之间的通信,根据提供的接口字段进行相对应匹配。


接下来通过我写的例子方便大家更好的去理解 JS 是如何调用 PA 能力的。


02

权限配置


本示例需要位置权限,因此在 config.json 中添加以下字段,还有就是需要在手机中打开定位开关:
"reqPermissions": [  {  "name""ohos.permission.LOCATION"  }],


03

代码演示


JS 端接口代码如下:其中 messageCode、abilityType、syncOption 值根据文档进行配置。
aa:async function (){
               var actionData = {};
               actionData.longitude = this.longitude;
               actionData.latitude = this.latitude;
                var action = {};
                action.data = actionData;
                action.bundleName = 'com.example.shundaschool';
                action.abilityName = 'com.example.shundaschool.LocationAbility'






请到「今天看啥」查看全文