鸿蒙5.0开发常见问题【如何在Native侧调用ArkTS侧的系统能力?】

问题详情

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

解决措施

  1. 通过napi_load_module接口加载模块。
  2. 通过napi_get_named_property接口获取模块属性。
  3. 通过napi_call_function接口调用方法。

具体方法可参考以下获取设备的屏幕宽高示例代码。

#include "CallSystemModule.h" 
#include "napi/native_api.h" 
#include <hilog/log.h> 
#define LOG_TAG "Pure" 
 
napi_value CallSystemModule::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); 
    // 业务拿到width 和 height,可以进一步处理具体业务逻辑 
    return nullptr; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值