鸿蒙next在uni-app中调用uni.previewImage保存图片到相册报错

鸿蒙next在uni-app中调用uni.previewImage保存图片到相册报错

开发环境 版本号 项目创建方式
Mac m2 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Mac

手机系统:HarmonyOS NEXT

手机系统版本号:HarmonyOS 5.0.1

手机厂商:华为

手机机型:nova13

页面类型:vue

vue版本:vue3

打包方式:云端

操作步骤:

  • 正常操作

预期结果:

  • 不报错,成功保存到相册

实际结果:

  • 报错

bug描述:

使用uni.previewImage报错图片到相册报错信息如下:
photoAccessHelper getPhotoAccessHelper inner add createDeleteRequest and showAssetsCreationDialog
17:09:27.677 photoAccessHelper appId is 包名_BIlroQEimcqtZsXQWv+roPUau+SoUaYoTt7Q01dRLMxIXgb3/Wxtg+HmMgSiHaKfqzvf7N9s8ow8esfGJcwPsXU=.
17:09:27.677 photoAccessHelper bundleName is 包名.
17:09:27.677 photoAccessHelper modeleName is .
17:09:27.677 photoAccessHelper labelId is 包名_BIlroQEimcqtZsXQWv+roPUau+SoUaYoTt7Q01dRLMxIXgb3/Wxtg+HmMgSiHaKfqzvf7N9s8ow8esfGJcwPsXU=.

我已经获取到了存储权限了,这是因为啥

更多关于鸿蒙next在uni-app中调用uni.previewImage保存图片到相册报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

17 回复

你 previewImage 中的图片链接是怎么样的?

更多关于鸿蒙next在uni-app中调用uni.previewImage保存图片到相册报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


请问复现了吗

请问复现了吗

有人知道是咋回事吗

请问有人遇到过嘛

你提供一下fail中的报错

都不走fail,复现路径是:使用uni.previewImage预览图片,长按图片,点击保存图片(应该是自带的修改不了),就报帖子里的那个,点击取消也报

你拿鸿蒙手机或者模拟器都能复现

回复 1***@163.com: 你提供的这个信息并不是报错信息,我这测试是正常的,你提供一下你的项目

回复 DCloud_UNI_yuhe: 上传了

回复 DCloud_UNI_yuhe: 你能正常监听到longPressActions的返回值?

测试项目/运行在鸿蒙next5.0.1、模拟器均报错

提供一下完整的uniapp项目,主要是看你项目中依赖是不是旧版本的

回复 DCloud_UNI_yuhe: 完整的项目咋提供啊,可以远程看一下

回复 1***@163.com: 先看一下 im

根据报错信息分析,这是鸿蒙系统特有的相册访问权限问题。在HarmonyOS NEXT上,除了常规的存储权限外,还需要额外处理相册访问权限。

解决方案:

  1. 确保manifest.json中已声明相册权限:
"permission": {
    "ohos.permission.READ_IMAGE"
}
  1. 在调用uni.previewImage前动态请求权限:
uni.authorize({
    scope: 'scope.photoAccessHelper',
    success() {
        uni.previewImage({
            urls: [imageUrl],
            success: () => {
                uni.saveImageToPhotosAlbum({
                    filePath: imageUrl
                })
            }
        })
    }
})
  1. 如果仍报错,可能是鸿蒙相册API的兼容性问题,可以尝试改用uni.downloadFile+uni.saveImage组合方案:
uni.downloadFile({
    url: imageUrl,
    success: (res) => {
        uni.saveImageToPhotosAlbum({
            filePath: res.tempFilePath
        })
    }
})
回到顶部