【鸿蒙实战开发】基于Napi调用ArkTS/系统接口

场景描述:

app应用在native侧调用 系统库/arkts模块的方法。

应用经常会遇到如下的业务诉求:

场景一:系统提供了ArkTS 接口,但未提供对应的NDK接口,当伙伴使用C++ 代码实现业务逻辑时,部分系统能力需要依赖系统ArkTS接口;

场景二: 系统仅提供了ArkTS 异步接口,未提供对应的NDK接口,当伙伴使用C++ 代码实现业务逻辑时,部分系统能力需要依赖系统ArkTS 异步接口;

场景三:伙伴在 TS 侧已定义接口,未实现对应的NDK接口,当伙伴使用C++ 代码实现业务逻辑时,想直接使用已有的TS 接口;

方案描述:

**场景一:**系统提供了ArkTS 接口,但未提供对应的NDK接口,当伙伴使用C++ 代码实现业务逻辑时,部分系统能力需要依赖系统ArkTS接口;

例如: 获取设备的屏幕宽高。

方案:

通过napi_load_module 的方式调用系统模块接口。

核心代码

static napi_value GetDisplaySize(napi_env env, napi_callback_info info) {

  // 获取arkts侧的系统库路径

  char path[64] = "@ohos.display";

  size_t typeLen = 0;

  napi_value string;

  napi_create_string_utf8(env, path,  typeLen, &string);

  // 加载系统库

  napi_value sysModule;

  napi_load_module(env, path, &sysModule);

  // 获取系统库中的"getDefaultDisplaySync"方法

  napi_value func = nullptr;

  napi_get_named_property(env, sysModule, "getDefaultDisplaySync", &func);

  napi_value funcResult;

  napi_call_function(env, sysModule, func, 0, nullptr, &funcResult);

  napi_value widthValue = nullptr;

  napi_get_named_property(env, funcResult, "width", &widthValue);

  double width;

  napi_get_value_double(env, widthValue, &width);

  OH_LOG_INFO( LOG_APP,  "width: %{public}f", width);

  napi_value heightValue = nullptr;

  napi_get_named_property(env, funcResult, "height", &heightValue);

  double height;

  napi_get_value_double(env, heightValue, &height);

  OH_LOG_INFO(LOG_APP, "height: %{public}f", height);

  // TODO: 业务拿到width 和 height,可以进一步处理具体业务逻辑

  return nullptr;

}

运行结果:

场景二:

系统仅提供了ArkTS 异步接口,未提供对应的NDK接口,当伙伴使用C++ 代码实现业务逻辑时,部分系统能力需要依赖系统ArkTS 异步接口;

例如: 如何访问系统定义的异步ArkTS方法。

方案

通过创建线程安全函数的方式 调用系统的异步接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值