HarmonyOS Native侧怎么样从env中获取resMgr?
想在Native侧使用rawfile的接口,不涉及ArkTS交互。通过Napi作为桥梁,获取到env,再从env中获取到this,再从this中获取到context,但是从context获取到resourceManager的时候,返回resourceManager为null。native侧怎么样从env中获取到resourceManager?
示例代码:
static napi_env s_Env = NULL;
static napi_value s_Context = NULL;
static napi_value s_ResourceManager = NULL;
static NativeResourceManager *s_NativeResourceManager = NULL;
napi_env& GetNapiEnv() {
  if (s_Env == NULL) {
    OH_LOG_Print(LOG_APP, LOG_ERROR, 1, "hxtest", "env is null");
  }
  OH_LOG_Print(LOG_APP, LOG_ERROR, 1, "hxtest", "env is not null");
  return s_Env;
}
static napi_value GetGlobal() {
  napi_env &env = GetNapiEnv();
  napi_status status;
  napi_value global;
  status = napi_get_global(env, &global);
  status = napi_get_named_property(env, global, "globalThis", &global);
  if ( status != napi_ok) {
    OH_LOG_Print(LOG_APP, LOG_ERROR, 1, "hxtest", "get globalThis failed");
  }
  return global;
}
napi_value& GetContext() {
  if (s_Context == NULL) {
    napi_env &env = GetNapiEnv();
    napi_status status;
    napi_value global = GetGlobal();
    napi_value context;
    status = napi_get_named_property(env, global, "context", &context);
    if (status == napi_ok) {
      OH_LOG_Print(LOG_APP, LOG_ERROR, 1, "hxtest", "context is not null");
      napi_valuetype valuetype_;
      status = napi_typeof(env, context, &valuetype_);
      if (status == napi_ok && valuetype_ == napi_object) {
        s_Context = context;
      }
    }
    if ( context == NULL) {
      OH_LOG_Print(LOG_APP, LOG_ERROR, 1, "hxtest", "context is  null");
    }
  }
  return s_Context;
}
napi_value& GetResourceManager() {
  if (s_ResourceManager == NULL) {
    napi_env &env = GetNapiEnv();
    napi_value &context = GetContext();
    napi_value resourceManager;
    napi_status status = napi_get_named_property(env, context, "resourceManager", &resourceManager);
    if (status == napi_ok) {
      napi_valuetype valuetype_;
      OH_LOG_Print(LOG_APP, LOG_ERROR, 1, "hxtest", "resource manager get");
      status = napi_typeof(env, resourceManager, &valuetype_);
      if (status == napi_ok && valuetype_ == napi_object) {
        s_ResourceManager = resourceManager;
      }
    }
    if (s_ResourceManager == NULL) {
      OH_LOG_Print(LOG_APP, LOG_ERROR, 1, "hxtest", "resource manager is null");
    }
  }
  return s_ResourceManager;
}
NativeResourceManager* GetNativeResourceManager() {
  if (s_NativeResourceManager == NULL) {
    napi_env &env = GetNapiEnv();
    napi_value &resMgr = GetResourceManager();
    s_NativeResourceManager = OH_ResourceManager_InitNativeResourceManager(env, resMgr);
  }
  return s_NativeResourceManager;
}
RawFile* asset_open(const char *pathValue) {
  NativeResourceManager *resMgr = GetNativeResourceManager();
  RawFile *rawFile = OH_ResourceManager_OpenRawFile(resMgr, pathValue);
  if (rawFile == NULL) {
    OH_LOG_Print(LOG_APP, LOG_ERROR, 1, "hxtest", "raw file is null");
    return NULL;
  }
  OH_LOG_Print(LOG_APP, LOG_ERROR, 1, "hxtest", "raw file is not null");
  return rawFile;
}
EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
  // 通过manager初始化xcomponent,并获取native window
  PluginManager::GetInstance()->Export(env, exports);
  s_Env = env;
  const char *path = "test.txt";
  asset_open(path);
  return exports;
}
EXTERN_C_END
        HarmonyOS
      
        赞
        
 收藏 0
 回答 1
 
        待解决
        
相关问题
 怎么样获取后台弹出界面的权限? 
6758浏览  • 1回复 待解决
Native侧获取env具有线程限制,如何在C++子线程触发ArkTS侧回调 
3418浏览  • 1回复 待解决
HarmonyOS 怎么样使线程休眠 
1303浏览  • 1回复 待解决
init中的env是否可以缓存,native层会将接收到的消息传递到ts侧需要env,请问可以使用init中的env吗? 
2490浏览  • 1回复 待解决
怎么样设置代理setup proxy 
923浏览  • 0回复 待解决
HarmonyOS napi_env 调用Native, Native 内启用多线程,但是env不支持多线程访问, 怎么处理? 
1338浏览  • 1回复 待解决
native侧的log获取不到 
2422浏览  • 1回复 待解决
FD自由开发者平台怎么样? 
19440浏览  • 1回复 待解决
怎么样才能用harmonyOS搭建家居智能平台? 
9331浏览  • 1回复 待解决
如何在Native侧调用ArkTS侧异步方法,并获取异步计算结果到Native侧 
4782浏览  • 1回复 待解决
HarmonyOS OHAudio API怎么样实现低延时耳返 
1150浏览  • 1回复 待解决
关于ArkTS的线程机制是怎么样的? 
2089浏览  • 2回复 待解决
Native侧如何获取ArkTS侧Object对象及其成员变量 
4097浏览  • 1回复 待解决
Redis 的内存用光了会怎么样呢? 
4380浏览  • 1回复 待解决
鸿蒙系统的未来发展是怎么样的 
6121浏览  • 1回复 待解决
PolarDB向量化执行架构是怎么样的? 
4451浏览  • 1回复 待解决
效果怎么样 
766浏览  • 2回复 已解决
HarmonyOS 外部链接怎么样拉起应用,有没有方法? 
1181浏览  • 1回复 待解决
鸿蒙的刷新机制是怎么样的? 
2178浏览  • 1回复 待解决
鸿蒙对渲染WebGL的支持目前怎么样了 
4186浏览  • 1回复 待解决
如何在Native侧获取APP版本信息 
3433浏览  • 1回复 待解决
HarmonyOS native如何从surface中获取原生window的width和height? 
901浏览  • 1回复 待解决
HarmonyOS NAPI,如果从ArkTS侧传入Uint8Array,请问Native该怎么接收这个数组? 
1707浏览  • 1回复 待解决
请问各位 开发设备 怎么样可以屏幕保持常亮? 
4220浏览  • 1回复 待解决
vue  中this.$set  更新视图在鸿蒙 arkts 中对应的写法是怎么样的? 
4212浏览  • 1回复 待解决





















创建对应的hsp的资源对象。