1.文件传输:在Native层将采集到的图片和音频文件保存到本地存储,然后在ArkTS侧通过文件读取的方式获取这些文件。
a.使用OH_ImageSourceNative_CreatePixelmap接口通过图片解码参数创建OH_PixelmapNative指针 。该接口需要指定解码参数和图像源数据,并返回一个指向创建的Pixelmap对象的指针;
b. 将编码后的图片数据保存到本地存储。可以使用鸿蒙系统提供的文件存储API,将数据写入到指定的文件路径
2数据流传输:在Native层实时读取图片和音频数据,通过网络或其他方式将数据流传输到ArkTS侧,ArkTS侧负责接收和处理这些数据流。
可以使用C++读写函数读写文件:https://www.runoob.com/cplusplus/cpp-files-streams.html
也可以在native侧直接调用Arkts的函数,把读取到的值作为参数传过去:
在ArkTS中声明一个类,在Student中包含两个属性以及成员函数getStudentInfo,分别会需要string,number作为入参:
export class Student {
private name: string
private age: number
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
public getStudentInfo(): string {
console.log("This student is " + this.name + "and is " + this.age);
return 'This student is ${this.name} and is${this.age}';
}
}
在index.d.ts中链接C++侧函数与ArkTS侧函数:
export const sendStudentInfo:(a: Object) => void;
在C++测调用ArkTS侧函数:
static napi_value PrintStudentInfo(napi_env env, napi_callback_info info)
{
size_t argc = 1;
napi_value args[1];
//获取TS侧传入的参数
napi_get_cb_info(env, info, &argc, &args[0], nullptr, nullptr);
napi_value getStudentInfo, stuInfo;
napi_get_named_property(env, args[0], "getStudentInfo", &getStudentInfo);
napi_value result = nullptr;
napi_call_function(env, args[0], getStudentInfo, 1, &stuInfo, &result);
return result;
}
将NativeCallArkTS接口导出:
EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
OH_LOG_INFO(LOG_APP, "KQM enter Native Init");
napi_property_descriptor desc[] = {
{ "sendStudentInfo", nullptr, PrintStudentInfo, nullptr, nullptr, nullptr, napi_default, nullptr},
};
napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
return exports;
}
EXTERN_C_END
在ArkTS中调用函数:
stu1: Student = new Student("张三", 18);
build() {
Row() {
Column() {
Button("Send student's message")
.fontSize(30)
.fontWeight(FontWeight.Bold)
.onClick(() => {
testNapi.sendStudentInfo(this.stu1)
})