HarmonyOS 鸿蒙Next native开发,native获取arkts回调函数返回值问题

void OnNetworkStateChange(napi_env env, RtcPlatformTSFNEvent* threadData) {
napi_status status;
napi_value callbackValue;
status = napi_create_function(env, nullptr, 0, [](napi_env env, napi_callback_info info) -> napi_value {
size_t argc = 1;
napi_value argv[1];
napi_status status;
void* data;
napi_get_cb_info(env, info, &argc, argv, nullptr, &data);
if (argc < 1) {
return nullptr;
}
//此处获取slotId
napi_value slotIdValue;
status = napi_call_function(env, systemModule, get_slot_id_method, 0, nullptr, &slotIdValue);
if(status != napi_ok) {
return nullptr;
}

return nullptr;
}, nullptr, &callbackValue);
if(status != napi_ok) {
return;
}
int slot_id = threadData->GetSlotId();
const char observer_module_name[] = "@ohos.telephony.observer";
napi_value observer_module;
status = napi_load_module(env, observer_module_name, &observer_module);
if(status != napi_ok) {
return;
}

napi_value onMethod;
status = napi_get_named_property(env, observer_module, "on", &onMethod);
if(status != napi_ok) {
return;
}
napi_value eventName;
status = napi_create_string_utf8(env, "networkStateChange", NAPI_AUTO_LENGTH, &eventName);
if(status != napi_ok) {
return;
}
napi_value options;
napi_create_object(env, &options);

napi_value slotIdKey;
napi_create_string_utf8(env, "slotId", NAPI_AUTO_LENGTH, &slotIdKey);

napi_value slotIdValue;
napi_create_int32(env, slot_id, &slotIdValue);

napi_set_property(env, options, slotIdKey, slotIdValue);

napi_value onArgs[3] = { eventName, options, callbackValue };
status = napi_call_function(env, observer_module, onMethod, 3, onArgs, nullptr);
if(status != napi_ok) {
return;
}
}

我需要怎么操作才能够把callback里面获取到的slotid返回给外层使用,比如赋值给入参RtcPlatformTSFNEvent* threadData?假定入参指针是始终有效的。


更多关于HarmonyOS 鸿蒙Next native开发,native获取arkts回调函数返回值问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

你的意思如果获取 napi_value 中保存的JS的值么?

可通过以下方法:

napi_value arg /假设有napi_vaue值

double value0;

napi_get_value_double(env, arg, &value0); //通过napi_get_value就能拿到对应JS值,

详细可参考:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/use-napi-process-V5

napi_call_function最后一个参数就是onMethod这个方法的返回值,创建一个napi_value替换nullptr

napi_value res;

napi_call_function(env, observer_module, onMethod, 3, onArgs, &res);

同时,HarmonyOS Node-API是基于Node.js 8.x LTS的Node-API规范扩展开发的机制,为提供了ArkTS/JS与C/C++模块之间的交互能力,接口使用及资料可参考nodejs的n-api,也可以从网上检索相关使用指导https://nodejs.org/docs/latest-v8.x/api/n-api.html。

HarmonyOS Node-API与Node.js 8.x LTS的Node-API规范的接口异同点,详见Node-API参考https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/napi-V5

更多关于HarmonyOS 鸿蒙Next native开发,native获取arkts回调函数返回值问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next native开发中,若要从native层获取ArkTS(ArkUI TypeScript)回调函数的返回值,需通过特定的接口或机制进行通信。由于ArkTS运行在ArkRuntime中,而native代码运行在系统的原生层,两者之间的通信通常依赖于系统提供的IPC(进程间通信)机制或特定的桥接API。

具体实现步骤如下:

  1. 定义回调接口:在ArkTS中定义一个回调函数,并确保其返回值类型与native层能够处理的数据类型相匹配。

  2. 注册回调:在native层,通过系统提供的API注册该回调函数,以便ArkTS层能够调用。

  3. 数据传递:在ArkTS回调函数中,使用系统提供的机制(如JSON对象、特定的数据结构等)将返回值传递给native层。

  4. 接收处理:native层接收到回调后,解析传递的数据,并根据需要进行处理。

注意,具体的API和机制可能因鸿蒙系统的版本和具体实现而有所不同。开发者需参考鸿蒙系统的官方文档和API指南,以确保正确实现跨层通信。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部