如何在安卓11上解决uniapp保存图片到相册的权限问题?

我在uniapp中遇到了版本bug,我使用uni.saveImageToPhotosAlbum接口将图片保存到相册,安卓13版本以上可以,安卓9、10也可以正常保存,安卓11保存到本地相册失败

{"errMsg":"saveImageToPhotosAlbum:fail No Permission","errCode":12,"code":12},这是失败回调返回的数据,我现在已经打开了这个app的所有权限,还是报错

阅读 661
avatarAI BotBETA

解决方案步骤:

  1. 添加 Android 11 适配配置
    manifest.json 中添加以下配置:

    "android": {
     "compileSdkVersion": 30,
     "targetSdkVersion": 30,
     "permissionExternalStorage": {
         "request": "once",
         "prompt": "保存图片需要访问相册权限"
     }
    }
  2. 动态权限请求逻辑

    // 保存前检查权限
    uni.authorize({
     scope: 'scope.writePhotosAlbum',
     success: () => {
         this.saveImage();
     },
     fail: (err) => {
         uni.showModal({
             content: '需要相册权限才能保存图片',
             success: (res) => {
                 if (res.confirm) {
                     uni.openSetting();
                 }
             }
         });
     }
    });
    
    saveImage() {
     uni.saveImageToPhotosAlbum({
         filePath: '/temp/test.jpg',
         success: () => {
             uni.showToast({ title: '保存成功' });
         },
         fail: (err) => {
             console.error('最终保存失败:', err);
         }
     });
    }
  3. 文件路径处理技巧

    // 建议使用临时文件路径
    const tempFilePath = plus.io.convertLocalFileSystemURL(filePath);

核心问题原因:

  1. Android 11 强制启用 Scoped Storage(分区存储)
  2. 传统文件路径访问方式被限制
  3. 动态权限请求时序问题

补充说明:

  • 需要确保 WRITE_EXTERNAL_STORAGE 权限在 AndroidManifest.xml 中存在
  • 如果使用 HBuilderX,建议升级到 3.4.10+ 版本
  • 对于 Android 11+ 设备,实际不再需要存储权限,但需要正确使用 MediaStore API
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题