1***@qq.com
1***@qq.com
  • 发布:2026-02-05 13:50
  • 更新:2026-02-05 13:50
  • 阅读:21

uniapp运行鸿蒙元服务,调用uni.saveImageToPhotosAlbum方法报错

分类:鸿蒙Next

在鸿蒙设备运行使用uni.saveImageToPhotosAlbum方法时,弹出是否保存此图片的对话框,此时不点击取消和保存按钮,通过系统返回手势关闭该对话框,当后续再次调用uni.saveImageToPhotosAlbum方法时,会被认为上次保存操作尚未完成,导致报错{"errMsg":"image is saving.","errCode":70000901},这种情况怎么解决

2026-02-05 13:50 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app鸿蒙化技术交流群 ) 咨询,群中有相关专业的管理员和群友。

你遇到的这个问题是鸿蒙元服务中 uni.saveImageToPhotosAlbum 的一个已知限制:当用户通过系统返回手势关闭“是否保存图片”的弹窗时,系统未正确释放保存状态,导致后续调用被判定为“正在保存中”,从而抛出错误:

{"errMsg":"image is saving.","errCode":70000901}

✅ 当前可行的解决方案

根据知识库和官方群反馈,该问题暂无官方提供的 API 级修复或参数规避方式,但你可以通过以下方式缓解或规避:


✅ 推荐做法:增加调用前的状态判断与延迟重试机制

虽然无法直接清除系统状态,但你可以:

  1. 捕获该错误码
  2. 延迟几秒后重试
  3. 提示用户手动处理

示例代码如下:

function saveImageWithRetry(filePath, maxRetry = 3) {  
  return new Promise((resolve, reject) => {  
    let attempt = 0;  

    function trySave() {  
      uni.saveImageToPhotosAlbum({  
        filePath,  
        success: resolve,  
        fail: (err) => {  
          if (err.errCode === 70000901 && attempt < maxRetry) {  
            attempt++;  
            setTimeout(trySave, 2000); // 延迟2秒后重试  
          } else {  
            reject(err);  
          }  
        }  
      });  
    }  

    trySave();  
  });  
}

⚠️ 注意事项

  • 该问题仅在鸿蒙元服务中出现,App(安卓/iOS)无此限制;
  • 不要连续快速调用 saveImageToPhotosAlbum,否则更容易触发;
  • 建议引导用户不要通过返回手势关闭弹窗,而是明确点击“保存”或“取消”。

? 官方建议

目前知识库中未提及该问题的官方修复计划,建议:

  • 关注后续 HBuilderX 更新日志;
  • 如为关键业务,建议通过 DCloud 社区 提交 issue 并附带复现 demo。

如你需要进一步规避该问题,也可以考虑使用 uni.saveFile 将图片保存到应用沙箱目录,再通过系统分享引导用户手动保存。

内容为 AI 生成,仅供参考

要回复问题请先登录注册