HarmonyOS 如何将Resource资源类型,转换为文件所在的路径string?

如何将Resource资源类型,转换为文件所在的路径string?

场景描述:需要做一个保存图片到相册的功能。图片资源是存放在/resource/base/media目录下$r('app.media.icon')通过以下方式获取string。

this.context.resourceManager.getString($r('app.media.icon'))

问题在于该接口会报错Resource not found by id,无法获取到路径。有没有其他方式可以获取图片资源路径?

HarmonyOS
6天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

​Resource为string支持限定词目录使用this.context.resourceManager.getStringSync(r('app.string.test').id),可以同步转换,不支持r('app.string.test', 2)方式。参考文档:​https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-resource-manager-V5?catalogVersion=V5

保存图片到相册可以使用context.resourceManager.getMediaContent,参考:​https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/savebutton-V5#ZH-CN_TOPIC_0000001847209144__%E5%BC%80%E5%8F%91%E6%AD%A5%E9%AA%A4​,示例代码如下:​

import photoAccessHelper from '@ohos.file.photoAccessHelper'; 
import fs from '@ohos.file.fs'; 
import common from '@ohos.app.ability.common'; 
import promptAction from '@ohos.promptAction'; 
import { BusinessError } from '@ohos.base'; 
async function savePhotoToGallery(context: common.UIAbilityContext) { 
  let helper = photoAccessHelper.getPhotoAccessHelper(context); 
  try { 
    // onClick触发后5秒内通过createAsset接口创建图片文件,5秒后createAsset权限收回。 
    let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg'); 
    // 使用uri打开文件,可以持续写入内容,写入过程不受时间限制 
    let file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 
    context.resourceManager.getMediaContent($r('app.media.bg1').id, 0) 
      .then(async value => { 
        let media = value.buffer; 
        // 写到媒体库文件中 
        await fs.write(file.fd, media); 
        await fs.close(file.fd); 
        promptAction.showToast({ message: '已保存至相册!' }); 
      }); 
  } 
  catch (error) { 
    const err: BusinessError = error as BusinessError; 
    console.error(Failed to save photo. Code is ${err.code}, message is ${err.message}); 
  } 
} 
@Entry 
@Component 
struct Index { 
  build() { 
    Row() { 
      Column({ space: 10 }) { 
        Image($r('app.media.bg1')) 
          .height(400) 
          .width('100%') 
          .draggable(false) 
    SaveButton().onClick(async (event: ClickEvent, result: SaveButtonOnClickResult) => { 
      if (result === SaveButtonOnClickResult.SUCCESS) { 
        const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; 
        savePhotoToGallery(context); 
      } else { 
        promptAction.showToast({ message: '设置权限失败!' }) 
      } 
    }) 
  } 
  .width('100%') 
} 
.height('100%') 
.backgroundColor(0xF1F3F5) 
  } 
}
分享
微博
QQ
微信
回复
6天前
相关问题
如何将Resource资源对象转成string类型
2950浏览 • 1回复 待解决
HarmonyOS 如何将base64数据转换为图片
373浏览 • 1回复 待解决
如何将时间戳转换为日期格式时间
2795浏览 • 1回复 待解决
Resource类型如何转为String
1993浏览 • 1回复 待解决
如何将app.media.app_icon,转换为PixelMap
1753浏览 • 1回复 待解决
如何将字符串转换为浮点数。
287浏览 • 1回复 待解决
HarmonyOS Resource怎么进行转换类型
380浏览 • 1回复 待解决
如何将ArrayBuffer转成string
460浏览 • 1回复 待解决
如何将ArrayBuffer转成string
2325浏览 • 1回复 待解决
请问如何将openblock文件转换成exe文件
2268浏览 • 0回复 待解决
HarmonyOS如何将Component转换PixelMap?
249浏览 • 1回复 待解决
如何将文件转换成字符串
330浏览 • 1回复 待解决