鸿蒙Next如何长按保存图片到相册

在鸿蒙Next系统里,长按图片想保存到相册时没有弹出保存选项,具体应该如何操作?有些应用能直接保存,但部分网页或第三方APP里的图片长按后只有分享功能,求教正确的保存方法或需要开启什么权限?

2 回复

鸿蒙Next长按保存图片?简单!长按图片→点“保存到相册”→搞定!如果没反应,记得先给应用相册权限哦~(程序员附体:别问我为什么知道,都是泪的教训😂)

更多关于鸿蒙Next如何长按保存图片到相册的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中,长按保存图片到相册可以通过以下步骤实现:

  1. 添加权限:在 module.json5 文件中添加存储权限:

    {
      "module": {
        "requestPermissions": [
          {
            "name": "ohos.permission.WRITE_IMAGE"
          }
        ]
      }
    }
    
  2. 使用长按事件:在图片组件上绑定长按手势,触发保存操作:

    import { Image } from '[@kit](/user/kit).ArkUI';
    import { mediaLibrary } from '[@kit](/user/kit).MediaLibraryKit';
    import { promptAction } from '[@kit](/user/kit).ArkUI';
    
    [@Entry](/user/Entry)
    [@Component](/user/Component)
    struct SaveImageExample {
      @State imageSrc: Resource = $r('app.media.example_image');
    
      // 长按保存图片
      async onLongPress() {
        try {
          // 获取媒体库实例
          let media = mediaLibrary.getMediaLibrary();
          // 创建图片文件(需替换为实际图片数据)
          let file = await media.createAsset(
            mediaLibrary.MediaType.IMAGE,
            'my_image.jpg',
            (err) => {
              if (err) {
                promptAction.showToast({ message: '保存失败' });
                return;
              }
            }
          );
          // 写入图片数据(此处需替换为实际图片的ArrayBuffer)
          // await file.writeBuffer(imageData);
          promptAction.showToast({ message: '图片已保存到相册' });
        } catch (error) {
          promptAction.showToast({ message: '保存失败: ' + error });
        }
      }
    
      build() {
        Column() {
          Image(this.imageSrc)
            .width(200)
            .height(200)
            .onTouch((event) => {
              if (event.type === TouchType.LongPress) {
                this.onLongPress();
              }
            })
        }
      }
    }
    

注意事项

  • 实际图片数据需通过网络或资源转换获取,示例中需补充 imageData(ArrayBuffer类型)。
  • 确保在真机上测试,模拟器可能无相册功能。
  • 首次使用需用户授权存储权限。

通过以上代码,长按图片即可触发保存到相册功能。

回到顶部