新聞中心
想了解更多內容,請訪問:

公司主營業(yè)務:成都網(wǎng)站設計、成都做網(wǎng)站、外貿網(wǎng)站建設、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出坪山免費做網(wǎng)站回饋大家。
和華為官方合作共建的鴻蒙技術社區(qū)
https://harmonyos./#zz
在進行鴻蒙應用開發(fā)中由于每個人的開發(fā)習慣不同,鴻蒙官方文檔說明中也是支持多種開發(fā)方式,今天跟大家聊聊關于JS跟Java之間混合開發(fā)方式。
基本介紹
首先是因為我個人習慣使用JS進行頁面開發(fā)布局,但是鴻蒙提供的Java API的功能比JS API的功能要強大,所以我選擇用JS開發(fā)頁面用Java實現(xiàn)邏輯交互,那么這兩者之間如何進行通信就是我們需要考慮的問題。好在官方文檔中有關于JS API調用Java API 機制的說明,F(xiàn)A提供了三個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進行關聯(lián),所以我們要建立兩者之間的通信,根據(jù)提供的接口字段進行相對應匹配。
接下來通過我寫的例子方便大家更好的去理解JS是如何調用PA能力的。
權限配置
本示例需要位置權限,因此在config.json中添加以下字段,還有就是需要在手機中打開定位開關
- "reqPermissions": [ { "name": "ohos.permission.LOCATION" }],
代碼演示
JS端接口代碼如下:其中messageCode、abilityType、syncOption值根據(jù)文檔進行配置
- 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';
- action.messageCode = 666;
- action.abilityType = 1;
- action.syncOption = 1;
- var result = 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端接口代碼如下:
- ... ...
- 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(int code, MessageParcel data, MessageParcel reply, MessageOption option) {
- switch (code) {
- case location: {
- String zsonStr = data.readString();
- RequestParamsss param = ZSONObject.stringToClass(zsonStr, RequestParamsss.class);
- System.out.println("我是param經(jīng)度:"+param.getLatitude());
- System.out.println("我是param緯度:"+param.getLongitude());
- // 返回結果當前僅支持String,對于復雜結構可以序列化為ZSON字符串上報
- GeoConvert geoConvert = new GeoConvert();
- try{
- List
address = geoConvert.getAddressFromLocation(param.getLatitude(), param.getLongitude(), 1); - // System.out.println(address);
- // System.out.println(address.get(0).getDescriptions(0));
- Map
zsonResult = new HashMap (); - 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 {
- // ASYNC
- MessageParcel reponseData = MessageParcel.obtain();
- reponseData.writeString(ZSONObject.toZSONString(zsonResult));
- IRemoteObject remoteReply = reply.readRemoteObject();
- try {
- remoteReply.sendRequest(0, reponseData, MessageParcel.obtain(), new MessageOption());
- reponseData.reclaim();
- } catch (RemoteException exception) {
- return false;
- }
- }
- }catch (IOException e){
- System.out.println("獲取位置信息異常");
- }
- break;
- }
- default:{
- reply.writeString("service not defined");
- }
- }
- return true;
- }
實現(xiàn)效果圖展示如下:
點擊獲取位置信息展示設備經(jīng)緯度,再次點擊查看位置通過逆地址轉換展示具體位置
這兩者能夠正常進行通信后,這樣我們就能夠在JS UI中進行頁面布局,在Java UI里進行邏輯處理了,希望以上內容能對大家有所幫助。
?著作權歸作者和HarmonyOS技術社區(qū)共同所有,如需轉載,請注明出處,否則將追究法律責任。
想了解更多內容,請訪問:
和華為官方合作共建的鴻蒙技術社區(qū)
https://harmonyos./#zz
名稱欄目:淺談鴻蒙應用開發(fā)JS與Java在手機APP中的混合開發(fā)方式
本文鏈接:http://m.5511xx.com/article/cdoosoc.html


咨詢
建站咨詢
