HarmonyOS API:JS FA调用Java PA机制
版本: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 | 是 | 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。 |
- 示例详见PA端(Internal Ability方式)章节。
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失败,请按以下步骤排查原因:
|
2004 | Internal Ability未注册 | Internal Ability未注册,请按以下步骤排查原因:
|
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"相关属性