在展开韩化英应用领域合作开发中虽然每一人的合作开发生活习惯相同,韩化英非官方文件格式表明中也是全力支持多种相同合作Attichy,那时跟他们谈谈有关 JS 跟 Java 间混和合作Attichy。
01基本上如是说
具体来说原因在于我对个人生活习惯采用 JS 展开网页合作开发产业布局,但韩化英提供更多的 Java API 的机能比 JS API 的机能要强悍,因此我优先选择用 JS 合作开发网页用 Java 同时实现方法论可视化。
因此这二者间怎样展开通讯是他们须要考量的难题,好在非官方文件格式有关 JS API 初始化 Java API 监督机制的表明。
FA 提供更多了四个 JS USB分别为:
FeatureAbility.callAbility(OBJECT):初始化 PA 潜能。FeatureAbility.subscribeAbilityEvent(OBJECT, Function):订户 PA 潜能。FeatureAbility.unsubscribeAbilityEvent(OBJECT):中止订户 PA 潜能。在 PA 端也有相关联的USB其包涵控制台初始化 Ability 和邻近地区初始化 Internal Ability 三种方式。
PA 端初始化 Ability USB方式为:
booleanIRemoteObject.onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option);PA 端初始化 Internal Ability USB方式为:
boolean onRemoteRequest(intcode, MessageParcel data, MessageParcel reply, MessageOption option)JS 端与 Java 通过USB扩展监督机制展开通讯,通过 bundleName 和 abilityName 展开关联,因此他们要建立二者间的通讯,根据提供更多的USB字段展开相相关联匹配。
接下来通过我写的例子方便他们更好的去理解 JS 是怎样初始化 PA 潜能的。
02权限配置
本示例须要位置权限,因此在 config.json 中添加以下字段,还有是须要在手机中打开定位开关:
“reqPermissions”: [ { “name”: “ohos.permission.LOCATION” }],03代码演示
JS 端USB代码如下:其中 messageCode、abilityType、syncOption 值根据文件格式展开配置。
aa:async function (){ var actionData = {}; 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 =await FeatureAbility.callAbility(action); var ret = JSON.parse(result); console.info(“00000” + ret); console.info(“0022” + JSON.stringify(ret.abilityResult)); this.$set(“address”,JSON.stringify(ret.abilityResult)) },PA 端USB代码如下:
… … private static final String BUNDLE_NAME = “com.example.shundaschool”; private static final String ABILITY_NAME = “com.example.shundaschool.LocationAbility”; … … public LocationAbility() { super(BUNDLE_NAME, ABILITY_NAME); } public boolean onRemoteRequest(intcode, MessageParcel data, MessageParcel reply, MessageOption option) { switch (code) { caselocation: { String zsonStr = data.readString(); RequestParamsss param = ZSONObject.stringToClass(zsonStr, RequestParamsss.class); System.out.println(“我是param经度:”+param.getLatitude()); System.out.println(“我是param纬度:”+param.getLongitude()); // 返回结果当前仅全力支持String,对于复杂结构可以序列化为ZSON字符串上报 GeoConvert geoConvert = newGeoConvert();try{ List<GeoAddress> address = geoConvert.getAddressFromLocation(param.getLatitude(), param.getLongitude(),1); // System.out.println(address); // System.out.println(address.get(0).getDescriptions(0)); Map<String, Object> zsonResult = new HashMap<String, Object>(); zsonResult.put(“code”, SUCCESS); System.out.println(“我是param:” + param); zsonResult.put(“abilityResult”, address.get(0).getDescriptions(0)); if(option.getFlags() == MessageOption.TF_SYNC) { reply.writeString(ZSONObject.toZSONString(zsonResult)); }else { // ASYNCMessageParcel reponseData = MessageParcel.obtain(); reponseData.writeString(ZSONObject.toZSONString(zsonResult)); IRemoteObject remoteReply = reply.readRemoteObject();try { remoteReply.sendRequest(0, reponseData, MessageParcel.obtain(), newMessageOption()); reponseData.reclaim(); }catch (RemoteException exception) { return false; } } }catch (IOException e){ System.out.println(); } break; } default:{ reply.writeString(“service not defined”); } } return true; }同时实现效果图展示如下:
击查看位置通过逆地址转换展示具体位置:
这两者能够正常展开通讯后,这样他们就能够在 JS UI 中展开网页产业布局,在 Java UI 里展开方法论处理了,希望以上内容能对他们有所帮助。