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

核心:

一. 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页面,添加了一个点击事件:

<div class="container">

    <button class="title" @click="onClick">
        向java FA传递数据
    </button>
</div>

 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<String, Object> result = new HashMap<String, Object>();
                    result.put("id", "002");
                    result.put("name", "xiaohuang");
                    reply.writeString(ZSONObject.toZSONString(result));
                    break;
                default:
                    return false;
            }
            return true;
        }

执行结果如下:

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jia_feiyang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值