更多内容请访问:与华为官方共建的Harmonyos技术社区https://harmonyos.51cto.com/#zz开发中鸿蒙应用,由于每个人的开发习惯不同,鸿蒙官方文档也支持多种开发方式。今天就和大家聊一聊JS和Java的混合开发方式。基本介绍首先,我习惯使用JS进行页面开发和布局,但是鸿蒙提供的JavaAPI比JSAPI更强大,所以我选择使用JS开发页面,使用Java实现逻辑交互。如何沟通是我们需要考虑的。幸运的是,官方文档中有关于JSAPI调用JavaAPI机制的描述。FA提供了三个JS接口:FeatureAbility.callAbility(OBJECT):调用PA能力;FeatureAbility.subscribeAbilityEvent(OBJECT,Function):订阅PA能力;FeatureAbility.unsubscribeAbilityEvent(OBJECT):取消订阅PA能力。PA端也有相应的接口,包括远程调用Ability和本地调用InternalAbility两种方式。PA端调用Ability接口的方式为:booleanIRemoteObject.onRemoteRequest(intcode,MessageParceldata,MessageParcelreply,MessageOptionoption);PA端调用InternalAbility接口的方式为:booleanonRemoteRequest(intcode,MessageParceldata,MessageParcelreply,MessageOptionoption)JS端通过接口扩展机制与Java通信,通过bundleName和abilityName进行关联,所以我们需要在两者之间建立通信,根据提供的接口字段进行相应的匹配。接下来通过我写的例子,方便大家更好的理解JS是如何调用PA能力的。权限配置本例需要位置权限,所以在config.json中添加如下字段,需要打开位置开关“reqPermissions”:[{“name”:“ohos.permission.LOCATION”}],代码demoJS端接口代码如下:messageCode、abilityType、syncOption值根据文档aa配置:asyncfunction(){varactionData={};actionData.longitude=this.longitude;actionData.latitude=this。latitude;varaction={};action.data=actionData;action.bundleName='com.example.shundaschool';action.abilityName='com.example.shundaschool.LocationAbility';action.messageCode=666;action.abilityType=1;action.syncOption=1;varresult=awaitFeatureAbility.callAbility(action);varret=JSON.parse(result);console.info("00000"+ret);console.info("0022"+JSON.stringify(ret.abilityResult));this.$set("address",JSON.stringify(ret.abilityResult))},PA接口代码如下:......privatestaticfinalStringBUNDLE_NAME="com.example.shundaschool";privatestaticfinalStringABILITY_NAME="com.example.shundaschool.LocationAbility";…publicLocationAbility(){super(BUNDLE_NAME,ABILITY_NAME);}publicbooleanonRemoteRequest(intcode,MessageParceldata,MessageParcelreply,MessageOptionoption){switch(code){casetlocation:{StringzsonStr=data.readString();RequestParamsssparam=ZSONObject.stringToClass(zsonStr,RequestParamsss.class)。out.println("我是param的经度:"+param.getLatitude());System.out.println("Iamthelatitudeofparam:"+param.getLongitude());//返回结果目前只支持String,对于复杂结构,可以序列化为ZSON字符串上报给GeoConvertgeoConvert=newGeoConvert();try{List
