栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

鸿蒙 JS FA 调用java PA简单实例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

鸿蒙 JS FA 调用java PA简单实例

核心:

  • 是通过FeatureAbility.callAbility(OBJECT)接口调用的。

一. Java PA 端

        需要继承 Ability,重写 onConnect 方法并返回 RemoteObject对象,业务逻辑在RemoteObject  的onRemoteRequest方法中处理。代码如下:


public class DemoService extends Ability {


    MyRemote myRemote = new MyRemote();
    //日志
    private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD001100, "Demo");


    @Override
    protected IRemoteObject onConnect(Intent intent) {
        
        //返回RemoteObject的对象
        return myRemote.asObject();
    }

    class MyRemote extends RemoteObject implements IRemoteBroker {

        public MyRemote() {
            super("descriptor");
        }

        @Override
        public boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply,MessageOption option) throws RemoteException {
            

            return true;
        }

        @Override
        public IRemoteObject asObject() {
            return this;
        }
    }
}

注意写完service类以后,需要 config.json 中注册service类,代码如下:

"abilities": [
      {
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ],
        "visible": true,
        "name": "com.jiakejian.myapplication.MainAbility",
        "icon": "$media:icon",
        "description": "$string:mainability_description",
        "label": "$string:entry_MainAbility",
        "type": "page",
        "launchType": "standard"
      },
      {
        "name": "com.jiakejian.myapplication.DemoService",
        "icon": "$media:icon",
        "description": "DemoService",
        "type": "service"
      }
    ],

二.JS FA端

简单写了一个hml页面,添加了一个点击事件:


    

 js中需要添加 action 对象,相当于javaFA跳转中的intent ,并设为 异步方法。代码如下:

onClick:async function(){

        //要传递的数据
        var data = {
            id:"001",
            name:"xiaoli"
        }
        //action对象,相当于intent
        var action = {};

        //添加service所在的包名
        action.bundleName = 'com.jiakejian.myapplication';
        
        //添加service的类名
        action.abilityName = 'com.jiakejian.myapplication.DemoService';

        //添加messageCode ,用于区分其他的action
        action.messageCode = 100;

        //添加数据
        action.data = data;
        
        //跳转的activity的类型,0代表service
        action.abilityType = 0;

        //最重要的一步:跳转
        var str = await FeatureAbility.callAbility(action);

        //下面是处理 java FA 返回的数据
         var result = JSON.parse(str);
        console.log(result.id);
        console.log(result.name);
    }

三 .Java FA端  在RemoteObject对象的 onRemoteRequest方法中 处理数据并返回数据,代码如下:

         @Override
        public boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply,MessageOption option) throws RemoteException {
            switch (code) {
                case 100:
                    String str = data.readString();
                    HiLog.info(LABEL_LOG, "str:"+str);
                    
                    //添加返回数据
                    Map result = new HashMap();
                    result.put("id", "002");
                    result.put("name", "xiaohuang");
                    reply.writeString(ZSONObject.toZSonString(result));
                    break;
                default:
                    return false;
            }
            return true;
        }

执行结果如下:

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/444603.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号