openSetting:fail can only be invoked by user TAP gesture.

场景描述(小程序)

我有这样一个需求,点击一个功能,需要用户授权手机的摄像头(等)权限,如果用户拒绝了,那么我们需要引导用户重新开启权限。
此报错的位置是在,当我们发现用户拒绝权限时,引导用户打开权限时报的错

需知

一句话

  • 尝试把 wx.openSetting() 放到 showModal()

代码

大概的检测流程如下

// 需求:引导用户手动开启摄像头的权限
openSetting() {
    wx.showModal({
      title: '提示', //提示的标题,
      content: '请打开摄像头权限', //提示的内容,
      showCancel: true, //是否显示取消按钮,
      cancelText: '取消', //取消按钮的文字,默认为取消,最多 4 个字符,
      cancelColor: '#000000', //取消按钮的文字颜色,
      confirmText: '确定', //确定按钮的文字,默认为取消,最多 4 个字符,
      confirmColor: '#3CC51F', //确定按钮的文字颜色,
      success: res => {
        if (res.confirm) {
          // openSetting 是需要事件驱动的,保证它的同步性。
          wx.openSetting({
            success(res) {
            },
            fail(res) {
            }
          })
        } else if (res.cancel) {
          console.log('用户点击取消')
          wx.showToast({
            title: '需要摄像头权限',
            icon: 'none',
            duration: 2000,
          })
        }
      }
    });
  },
wx.getSetting({
  let that = this;
  // 获取权限信息
  success: response => {
    if (!response.authSetting['scope.camera']) {
      wx.authorize({
        scope: 'scope.camera',
        success() {
          // 同意摄像头权限后的事务
        },
        fail() {
          // 不同意摄像头权限后,引导用户开启
          if (wx.openSetting) {
            // 如果没有授权摄像头权限,引导用户开启
            that.openSetting();
          } 
          return;
        }
      })
    } else {
      // 同意摄像头权限后的事务
    }
  }
})

在这里插入图片描述

参考文章

1. 微信小程序中用户拒绝授权的处理方式
2. 关于openSetting通过tap的调用

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值