部门应用的主要开发语言为C/C++,但是HarmonyOS的部门接口仅以ArkTS的形式暴露,因此必要将ArkTS的接口封装为Native接口。本例以DocumentViewPicker的Select方法为例,提供了Napi封装ArkTS API的通用方法,本例包含内容如下:
- Native侧与ArkTS侧的相互调用
- Native对象转换为ArkTS对象(包括如何在ArkTS侧调用一样寻常形式的Native方法)
- 线程安全函数的利用
- 等待线程安全函数的实行结果
- 多实例环境下,如何在正确的窗口内实行方法
效果图预览
测试说明:
- 点击"JS线程调用"按钮,从native侧js线程拉起picker
- 点击"
Thread线程调用"按钮,从native侧pthread子线程中拉起picker
- 拉起picker后,单击直接选择单个文件,长按可选择多个文件
- 本例在拉起picker时设置了maxSelectNumber=3,最多个选择3个文件
集成说明:
利用说明:
- [建议]在EntryAbility之外调用registryDocumentViewPickerFn方法,避免多实例下的重复注册
- [必须]给每个UIAbility天生唯一的ID属性,可利用generateAbilityID方法
- [必须]在UIAbility的onWindowStageCreate中的windowStage.loadContent的回调中调用addUIContext方法
- [必须]在UIAbility的onWindowStageCreate中的windowStage.loadContent之后调用setTopAbilityID
- [建议]在UIAbility的onWindowStageDestroy中调用removeUIContext方法
实现思绪
- native侧必要主动调用ets侧的代码,必要将ets侧代码注入到native侧,并在注册时创建函数的引用及线程安全函数,并生存当火线程(js线程)的id及env供后续调用时利用
ets侧:
- etswrapper.registryDocumentViewPickerFn(documentViewPickerSelect, documentViewPickerSave);
复制代码- NODE_API_CALL(env, napi_create_threadsafe_function(env
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |