HarmonyOS鸿蒙Next中在showAssetsCreationDialog中保存动态图呢?

HarmonyOS鸿蒙Next中在showAssetsCreationDialog中保存动态图呢? https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/photoaccesshelper-savebutton-V5 由于是flutter第三方框架没办法用Save_Button. 那么看到了showAssetsCreationDialog. 但是showAssetsCreationDialog没办法把图片和视频生成动态图 然后保存到相册中去啊 大佬们有办法吗


更多关于HarmonyOS鸿蒙Next中在showAssetsCreationDialog中保存动态图呢?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

测试使用 showAssetsCreationDialog 打开权限后,可以把Gif 写入相册,看GIF也正常可用呢,可参考官网排查下,https://developer.huawei.com/consumer/cn/doc/architecture-guides/tools-v1_2-ts_283-0000002429991637

async example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, path: string) {
  console.info('qts ShowAssetsCreationDialogDemo==' + fileUri.getUriFromPath(path));
  try {
    // 获取需要保存到媒体库的位于应用沙箱的图片/视频uri。
    let srcFileUris: Array<string> = [
      fileUri.getUriFromPath(path)// 实际场景请使用真实的uri。
    ];
    let photoCreationConfigs: Array<photoAccessHelper.PhotoCreationConfig> = [
      {
        title: 'test1', // 可选。
        fileNameExtension: 'gif',
        photoType: photoAccessHelper.PhotoType.IMAGE,
        subtype: photoAccessHelper.PhotoSubtype.DEFAULT, // 可选。
      }
    ];
    let desFileUris: Array<string> = await phAccessHelper.showAssetsCreationDialog(srcFileUris, photoCreationConfigs);
    console.info('qts showAssetsCreationDialog success, data is ' + desFileUris);
    if (desFileUris.length > 0) {
      const authorizedUri: string = desFileUris[0];
      // 将沙箱图片写入授权uri(核心写操作)
      const srcFd = await fs.open(path, fs.OpenMode.READ_ONLY);
      const destFd = await fs.open(authorizedUri, fs.OpenMode.WRITE_ONLY);
      await fs.copyFile(srcFd.fd, destFd.fd);
      // 关闭文件描述符
      fs.close(srcFd);
      fs.close(destFd);
      console.info('qts Image saved successfully');
    } else {
      console.error('qts User denied authorization');
    }
  } catch (err) {
    console.error('qts showAssetsCreationDialog failed, errCode is ' + err.code + ', errMsg is ' + err.message);
  }
}

更多关于HarmonyOS鸿蒙Next中在showAssetsCreationDialog中保存动态图呢?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


解决了 最后申请了写入相册权限搞定了。你给的这个代码我试过的 不行 动态图是其他方法。

权限怎么申请的,

在HarmonyOS Next中,使用showAssetsCreationDialog保存动态图时,需通过Image组件加载动态图资源,结合MediaLibrary媒体库API实现存储。调用getMediaLibrary获取媒体库实例,用createAsset方法指定资源类型为MediaType.IMAGE,并设置正确路径与参数完成保存。注意动态图格式需为系统支持的GIF或WebP等。

在HarmonyOS Next中,showAssetsCreationDialog 主要用于创建图片或视频资源,但当前版本不支持直接生成动态图(如GIF)。若需保存动态图到相册,建议通过以下方式实现:

  1. 使用媒体处理库:通过第三方或自定义库(如FFmpeg)将多张图片或视频帧合成为动态图,生成文件后保存到设备。
  2. 直接文件写入:将动态图数据写入应用沙箱路径,再通过PhotoAccessHelpercreateAsset方法添加到相册。示例代码:
    const photoAccessHelper = require('@ohos.file.photoAccessHelper');
    const context = ...; // 获取应用上下文
    const phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
    
    // 假设动态图文件已生成在应用沙箱路径
    let gifPath = '...'; // 动态图文件路径
    let displayName = 'dynamic_image.gif';
    await phAccessHelper.createAsset(photoAccessHelper.PhotoType.IMAGE, gifPath, displayName);
    
  3. 结合平台能力:若Flutter侧有相关插件,可调用HarmonyOS原生接口处理生成和保存逻辑。

注意:动态图生成需自行处理编码和帧合成,确保文件格式符合相册要求(如GIF或MP4)。

回到顶部