【问题形容】

文档形容了js调用pa案例,没有ets调用pa用例?接下来就是ets怎么调用pa

参考文档链接

https://developer.harmonyos.c...

【解决方案】

第一步:新建pa的Ability(目前命名为MyServiceAbility)

参考资料链接

https://developer.harmonyos.c...

代码如下

// ohos相干接口包 public class ComputeInternalAbility extends AceInternalAbility {    private static final String BUNDLE_NAME = "com.harmony.alliance.myets";    private static final String ABILITY_NAME = "com.harmony.alliance.myets.ComputeInternalAbility";    private static final int SUCCESS = 0;    private static final int ERROR = 1;    private static final int PLUS = 1001;// 定义日志标签private static final HiLogLabel LABEL = new HiLogLabel(HiLog.LOG_APP, 0, "MY_TAG");    private static ComputeInternalAbility instance;    private AbilityContext abilityContext;    // 如果多个Ability实例都须要注册以后InternalAbility实例,须要更改构造函数,设定本人的bundleName和abilityName    public ComputeInternalAbility() {        super(BUNDLE_NAME, ABILITY_NAME);    }    /**     * Internal ability 注册接口。     */    public static void register(AbilityContext abilityContext) {        instance = new ComputeInternalAbility();        instance.onRegister(abilityContext);    }     /**     * Internal ability 登记接口。     */    public static void unregister() {        instance.onUnregister();    }     public boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) {        switch (code) {            case PLUS: {               System.err.println("app log pa失去ets数据"+data.readString());                Map<String, Object> result = new HashMap<String, Object>();                result.put("code", SUCCESS);                result.put("abilityResult", "Pa data");                MessageParcel responseData = MessageParcel.obtain();                responseData.writeString(ZSONObject.toZSONString(result));                IRemoteObject remoteReply = reply.readRemoteObject();                try {                    remoteReply.sendRequest(0, responseData, MessageParcel.obtain(), new MessageOption());                } catch (RemoteException exception) {                    return false;                } finally {                    responseData.reclaim();                }                break;            }            default: {                Map<String, Object> result = new HashMap<String, Object>();                result.put("abilityError", ERROR);                reply.writeString(ZSONObject.toZSONString(result));                return false;            }        }        return true;    }     private void onRegister(AbilityContext abilityContext) {        this.abilityContext = abilityContext;        this.setInternalAbilityHandler((code, data, reply, option) -> {            return this.onRemoteRequest(code, data, reply, option);        });    } private void onUnregister() {        abilityContext = null;        this.setInternalAbilityHandler(null);    }}

第二步 查看config.json是否abilities是否该Pa配置文件

第三步 书写MainAbility的onStart()和onStop()代码 代码如下

package com.harmony.alliance.myets; import ohos.ace.ability.AceAbility;import ohos.aafwk.content.Intent;import ohos.security.SystemPermission; public class MainAbility extends AceAbility {    @Override    public void onStart(Intent intent) {         ComputeInternalAbility.register(this);        super.onStart(intent);    }@Override   public void onStop() {        ComputeInternalAbility.unregister();        super.onStop();        SampleJSInterface.getInstance().deregister(this);    }}

第四步 书写ets文件

@Entry@Componentstruct MyService {  build() {Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {      Text('ets调用pa')        .fontSize(50)        .onClick(function () {          FeatureAbility.callAbility({            bundleName: 'com.harmony.alliance.myets',            abilityName: 'com.harmony.alliance.myets.ComputeInternalAbility',            messageCode: 1001,            abilityType: 1,            data: { firstNum: 1, secondNum: 2 },            syncOption: 0          }).then((data) => {             console.log('pa传递给ets的数据 ' + data);          })         })        .fontWeight(FontWeight.Bold)    }    .width('100%')    .height('100%')  }}

运行成果:

更多精彩内容,请见华为开发者官方论坛→https://developer.huawei.com/...