• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

HarmonyOSArkUI-鸿蒙-ets怎么调用PA

android 搞代码 3年前 (2022-03-01) 17次浏览 已收录 0个评论

【问题形容】

文档形容了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
@Component
struct 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/…


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:HarmonyOSArkUI-鸿蒙-ets怎么调用PA

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址