这个地方还是有些困惑人的,拒绝了保存图片的授权,处理不好再次保存图片的时候就没有反应了,还是很急人的,那么我们来记录一下这个地方。
大家都知道,微信小程序保存图片等都需要获取相对应的权限才可以进行接下来的操作可行,那么如果我们一开始就拒绝了授权,再次想要保存的时候也还是要打开权限才行,所以我们来认识两个跟小程序授权相关的api。

获取用户当前的设置

要使用保存图片权限之前我们首先要看看设备有没有这个权限,所以要获取一下用户当前的设置

wx.getSetting({
  success (res) {
    console.log(res.authSetting)
    // res.authSetting = {
    //   "scope.userInfo": true,
    //   "scope.userLocation": true
    // }
  }
})

有上面的代码可以看到,这个api的返回值中包含了用户已经打开的设置,那么对于我们来说,如果使用的时候已经打开了保存图片的权限scope.writePhotosAlbum是true,我们就可以直接保存图片到本地;但是如果非true,那么我们就要了解一下怎么打开这个权限了~

设置需要打开的权限

注意:设置界面只会出现小程序已经向用户请求过的权限。
2.3.0 版本开始,用户发生点击行为后,才可以跳转打开设置页,管理授权信息。详情

这段话的意思就是,我们要向设置我们想要用的设置,必须是我们之前拒绝过的,有拒绝记录的,才能在这个地方找到把那个可以设置打开。

wx.openSetting({
  success (res) {
    console.log(res.authSetting)
  }
})

书接上面,如果我们使用保存权限时发现我们已经拒绝了授权,就是并没有打开这项权限,所以使用打开权限的api,然后就会去到设置权限的页面

ios小程序禁止截屏_ios小程序禁止截屏


打开这个权限回去就可以保存图片了。

上代码:

saveImg1() {
    let that = this;
    //看看是否有保存图片的权限,没有就去打开权限
    let openSetting = function(resourse) {
      wx.getSetting({
        success: (res) => {
          console.log('getSetting', res);
          if (res.authSetting['scope.writePhotosAlbum']) {
            saveImg(resourse)
          }else{
            wx.showModal({
              title: '是否授权保存到相册',
              content: '需要获取您的保存图片权限,请确认授权,否则图片将无法保存到相册',
              success: function (tip) {
                if (tip.confirm) {
                  wx.openSetting({
                    success: function (data) {
                      if (data.authSetting["scope.writePhotosAlbum"] === true) {
                        applyApi.toast("授权成功");
                        saveImg(resourse)
                      } else {
                        applyApi.toast("授权失败");
                      }
                    }
                  })
                }
              }
            })
          }
        },
        fail: function(res) {},
        complete: () => {}
      })
    }
    let saveImg = function(resourse) {
      console.log("保存图片:",resourse);
      wx.saveImageToPhotosAlbum({
        filePath: resourse.tempFilePath,
        success: function(res) {
          console.log(res)
          applyApi.toast('保存成功!')
        },
        fail: function(res) {
          console.log(res)
          console.log('fail-saveImageToPhotosAlbum')
          //这个地方加个缓存的意思就是,为了拒绝过了之后缓存为true,再次操作的时候才会去核实保存图片权限的问题
          if(wx.getStorageSync("saveImg") == true){
            openSetting(resourse)
          }
          wx.setStorageSync("saveImg",true);
        }
      })
    }
    wx.downloadFile({
      url: that.QRCodeUrl,
      success: function(res) {
        console.log(res)
        saveImg(res)
      },
      fail: function() {
        console.log('fail-downloadFile')
      }
    })
  }

授权成功后返回保存页面图片就会执行保存程序了。
OK,以上就是小程序保存图片的内容咯,有问题欢迎评论留言~