【HarmonyOS】鸿蒙中如何获取资源文件的指定类型 fd,string,Uint8Array,RawFileDescriptor
一、问题背景:
众所周知,在鸿蒙中的资源分为media和rawfile。两者的区别对标android工程一致,后者是其他类型文件,原始文件形式保存,不会被集成到resources.index文件中。文件名可自定义。
在entry中通过$ rawfile可以访问到rawfile文件下存放的音频资源。例如xxx.mp3,此时如果不同module模块的resource下资源,是不能通过直接$rawfile访问。
需要通过模块名字,使用上下文获取到子模块的上下文:
getContext.createModuleContext(moduleName).resourceManager.getRawFd("xxx.mp3")。
之后会访问得到的是RawFileDescriptor类型对象。
那如何转化为string 或者Resource ?
二、解决方案:
在鸿蒙中资源的形式一般为 fd,string,Uint8Array,RawFileDescriptor。大家的惯性思维首先想到的是,从其中一个类型转化成目标类型。其实鸿蒙已经提供了一个强大的资源管理器,就是问题背景中调用函数的resourceManager。当我们通过这个管理器是可以获取任意上述目标类型的。只要知道其资源id即可。
三、DEMO示例:
let fileDescriptor = getContext(this).createModuleContext("模块名").resourceManager.getRawFdSync("test.mp3");
let fd = fileDescriptor.fd;
let Uint8Array = getContext(this).createModuleContext("模块名").resourceManager.getRawFileContentSync("test.mp3");
let stringValue = getContext(this).createModuleContext("模块名").resourceManager.getStringByNameSync("test.mp3");