HarmonyOS API:JS FA调用Java PA机制

joytrian
发布于 2023-4-13 19:32
浏览
0收藏

版本:v3.1 Beta

AceInternalAbility类(Java语言,Internal Ability方式)

更新时间: 2023-02-17 09:19

导入模块

import ohos.ace.ability.AceInternalAbility;

AceInternalAbility

AceInternalAbility(bundleName: string, abilityName: string): Object

AceInternalAbility的构造函数,生成一个Internal Ability对象。

  • 参数描述

参数名

类型

必填

说明

bundleName

string

Ability的包名称,需要与JS端请求匹配,区分大小写。

abilityName

string

Ability名称,需要与JS端请求匹配,区分大小写。

  • 返回值

类型

说明

Object

AceInternalAbility对象。

  • 方法void setInternalAbilityHandler(final AceInternalAbilityHandler handler),handler参数详见​​onRemoteRequest参数描述​​​。
    表1 handler参数描述

参数名

类型

必填

说明

handler

​AceInternalAbilityHandler​

Internal Ability的处理函数


说明

当bundleName、abilityName相同时,如果两个Ability同时注册这个InternalAbility,只有后一个Ability的注册有效。

建议需要在不同的Ability中,注册同一个InternalAbility类时,要分别设定不同的bundleName和abilityName,实例对象根据bundleName和abilityName的值进行区分,应用自行定义即可。

如果要在page的onInit方法中调用AceInternalAbility的能力,在Ability实例的onStart方法中,注册AceInternalAbility操作需要放在super.start()之前。

AceInternalAbilityHandler接口(Java语言,Internal Ability方式)

更新时间: 2023-02-17 09:19

导入模块

import ohos.ace.ability.AceInternalAbility.AceInternalAbilityHandler;

onRemoteRequest

onRemoteRequest(code: int, data: MessageParcel, reply: MessageParcel, option: MessageOption): boolean

JS端携带的操作请求业务码以及业务数据,业务执行完后,返回响应给JS端。开发者需要实现该接口的方法。

  • onRemoteRequest参数描述

参数名

类型

必填

说明

code

int

Js端发送的业务请求编码(PA端定义需要与Js端业务请求码保持一致)。

data

MessageParcel

Js端发送的MessageParcel对象,当前仅支持json字符串格式。

reply

MessageParcel

将本地业务响应返回给Js端的MessageParcel对象,当前仅支持String格式。

option

MessageOption

指示请求是同步还是异步方式。


说明

1. code以及对应的data和reply在对外开放后,需要保证前向兼容性。

2. MessageParcel.writeString(String)默认最大支持65535个字节,若需要传输大数据,可以使用ohos.utils.Parcel.setCapacity()调整buffer容量大小。

  • 返回值

类型

说明

boolean

操作成功返回true,否则返回false。


JS端返回结果格式以及常见错误码

更新时间: 2023-02-17 09:19

JS端返回结果/上报事件格式

表1

结果

格式:

样例

备注

成功结果

string

{

"code":0,

"data": {

"abilityResult":3072

}

}

成功响应结果为原始字符串格式,通道不做处理,透传到JS端,对于复杂类型,可以将结果序列化为JSON字符串格式进行传输,如样例。

成功响应在Promise对象的resolve回调中返回。

成功响应的处理方式可参考​​计算服务-FA JavaScript端​​。

一般事件

{

"code": 0,

"data": Object,

}

{

"code":0,

"data":100

}

Event一般事件上报为JSON字符串格式,包含业务码(code)和事件信息(data)。

在subscribeAbilityEvent方法注册的回调函数中获取该事件结果。

一般事件的处理方式可参考​​计算服务-FA JavaScript端​​。

失败结果/异常事件

{

"code":Number,

"data":Object

}

{

"code":52,

"data":"Internal ability not register."

}

失败响应在Promise对象中返回,错误码参见:​​常见错误码​​。

Event异常事件在subscribeAbilityEvent方法注册的回调函数中获取。

失败响应处理方式可参考​​计算服务-FA JavaScript端​​​和​​订阅及取消订阅服务-FA JavaScript端​​章节。

常见错误码

表2

错误码

含义

处理建议

0

成功

-

2001

一般错误

FA调用PA一般错误,请根据JS返回的错误信息,分析失败原因,或通过日志进一步查看详细原因。

2002

携带参数非法

携带参数非法,请参见​​FeatureAbility模块(JS端SDK接口)​​对应接口,检查JS携带的必填参数是否完整,以及其类型是否正确。若检查无误,请通过日志进一步查看详细原因。

2003

连接PA失败

连接PA失败,请按以下步骤排查原因:

  1. 请先确认使用的Ability类型是否为Ability,使用示例参见:​​PA端(Ability方式)​​。
  2. 检查确认JS携带的bundleName和abilityName是否和PA相同。
  3. 检查PA的配置是否正确。
  4. 根据JS返回的错误信息,分析失败原因,或通过日志进一步查看详细原因。

2004

Internal Ability未注册

Internal Ability未注册,请按以下步骤排查原因:

  1. 请先确认使用的Ability类型是否为Internal Ability,使用示例参见:​​PA端(Internal Ability方式)​​。
  2. 检查确认JS携带的bundleName和abilityName是否和注册的Internal Ability相同。
  3. 根据JS返回的错误信息,分析失败原因,或通过日志进一步查看详细原因。

2005

FA与PA连接断开

FA与PA的连接已断开,可能是由于PA端产生了异常,请根据JS返回的错误信息,分析失败原因,或通过日志进一步查看详细原因。

2006

调用PA服务,PA返回失败

调用PA服务,PA侧返回失败,请根据JS返回的错误信息,分析失败原因,或通过日志进一步查看详细原因。

2007

订阅PA服务,PA返回失败

订阅PA服务,PA侧返回失败,请根据JS返回的错误信息,分析失败原因,或通过日志进一步查看详细原因。

2008

取消订阅PA服务,PA返回失败

取消订阅PA服务,PA侧返回失败,请根据JS返回的错误信息,分析失败原因,或通过日志进一步查看详细原因。

2009

解析PA发送的JSON消息异常

PA发送的JSON字符串格式异常,请根据JS返回的错误信息检查消息格式是否正确,或通过日志进一步查看详细原因。

2010

远端异常捕获

调用PA服务,PA端抛出异常,请根据JS返回的异常信息,分析原因,或通过日志进一步查看详细原因。

多实例接口

更新时间: 2023-02-17 09:19


方舟开发框架-基于JS扩展的类Web开发范式框架的JS引擎支持多Ability实例管理,不同Ability实例可绑定不同窗口实例,并能指定不同JS Component入口,运行互不影响。不同Ability实例的实例名互不相同,在编写应用时,开发人员需调用接口设置实例名。

加载方法

应用通过AceAbility类中setInstanceName()接口设置该实例的实例名称。

  • void setInstanceName(String name)参数name:实例名称。实例名称与应用配置文件(config.json)中module.js数组下对象的name的值对应,若上述字段的值为{实例名称},则需在应用Ability实例的onStart方法中调用此接口将实例名设置为{实例名称}。若用户未修改实例名,而使用了缺省值default,则无需调用此接口。注意:多实例应用的module.js字段中有多个实例项,使用时需找当前实例对应的项。使用方法:在MainAbility的onStart方法,于super.onStart前调用此接口。代码示例如下:

public class MainAbility extends AceAbility {
    @Override
    public void onStart(Intent intent) {
        setInstanceName("JSComponentName"); // config.json配置文件中module.js.name的标签值。
        super.onStart(intent);
    }
}

说明

需在super.onStart(Intent)前调用此接口。

非桌面图标入口的Ability实例在config.json的描述请慎重填写"skills"相关属性


文章转载自:​​https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/js-apis-multi-instance-0000001050028958-V3?catalogVersion=V3​

已于2023-4-13 19:32:42修改
收藏
回复
举报
回复
    相关推荐