编程语言
首页 > 编程语言> > 微信小程序权限检测封装, 针对用户拒绝授权情况

微信小程序权限检测封装, 针对用户拒绝授权情况

作者:互联网

针对用户拒绝授权的情况; 这边以  蓝牙权限为例子:

 

 点击按钮=>

 

 

 用户拒绝后=>

 

 

 

 

代码:

<view>
    <button bindtap="initBlue">连接蓝牙</button>
</view>
const permisson = require("../../utils/tools/permisson"); // 权限校验
const blePermissionName = "scope.bluetooth"; // 蓝牙对应的权限名称
const blePermissionZhName = "蓝牙"; // 蓝牙权限对应的中文名称
Page({
  data: {},
  initBlue: function () {
    // 初始化蓝牙模块。
    wx.openBluetoothAdapter({
      success: (res) => {
        console.log("初始化蓝牙设备成功");
        this.findBlue(); //2.0
      },
      fail: (err) => {
        console.log(err);
        //如果手机上的蓝牙没有打开,可以提醒用户
        wx.showModal({
          showCancel: false,
          content: "手机蓝牙未打开",
        });
        //请求蓝牙权限
        permisson.permission_request(blePermissionName, blePermissionZhName);
      },
    });
  },
  findBlue() {
    // 开始搜寻附近的蓝牙外围设备
    wx.startBluetoothDevicesDiscovery({
      allowDuplicatesKey: false,
      interval: 0,
      success: (res) => {
        console.log("搜索附近的蓝牙设备", res);
      },
      fail: (res) => {
        console.log("搜索附近的蓝牙设备失败");
      },
    });
  },
});
permisson.js
/**
 * 检测是否有对应的权限,通过回调函数返回结果
 * @param {String} perName 权限名称
 * @param {function} perResultCbFun 结果回调函数,参数为true表示成功
 */
function permission_check(perName, perResultCbFun) {
  wx.getSetting({
    success(res) {
      if (!res.authSetting[perName]) {
        if (typeof perResultCbFun == "function") {
          console.log("授权状态获取失败", perName);
          perResultCbFun(false);
        }
      } else {
        if (typeof perResultCbFun == "function") {
          console.log("授权状态获取成功", perName);
          perResultCbFun(true);
        }
      }
    },
    fail(res) {
      console.log("授权状态获取失败", perName);
      if (typeof perResultCbFun == "function") {
        perResultCbFun(false);
      }
    },
  });
}
/**
 * 请求对应的权限
 * @param {String} perName 权限名称
 * @param {String} perZhName 权限对应的中文名称,用来做提示用
 * @param {function} perRequestCbFun 请求结果回调(参数为true表示成功)
 */
function permission_request(perName, perZhName, perRequestCbFun) {
  permission_check(perName, (perCheckResualt) => {
    if (perCheckResualt) {
      // 权限已经请求成功
      if (typeof perRequestCbFun == "function") {
        perRequestCbFun(true);
      }
    } else {
      // 如果没有该权限,就去申请该权限
      wx.authorize({
        scope: perName,
        success() {
          // 用户已经同意小程序使用ble,后续调用 wx.startRecord 接口不会弹窗询问
          if (typeof perRequestCbFun == "function") {
            perRequestCbFun(true);
          }
        },
        fail() {
          // 用户拒绝授予权限
          console.log("用户拒绝授权", perName);
          // 弹出提示框,提示用户需要申请权限
          wx.showModal({
            title: "申请权限",
            showCancel: false,
            content: "需要使用" + perZhName + "权限,请前往设置打开权限",
            success(res) {
              if (res.confirm) {
                console.log("用户点击确定");
                // 打开权限设置页面,即使打开了权限界面,也不知道用户是否打开了权限,所以这里返回失败
                wx.openSetting({
                  success(res) {
                    if (typeof perRequestCbFun == "function") {
                      perRequestCbFun(false);
                    }
                  },
                  fail(err) {
                    if (typeof perRequestCbFun == "function") {
                      perRequestCbFun(false);
                    }
                  },
                });
              } else if (res.cancel) {
                if (typeof perRequestCbFun == "function") {
                  perRequestCbFun(false);
                }
              }
            },
          });
        },
      });
    }
  });
}
module.exports = {
  permission_request,
};

其它权限你只要修改 这两个值就行: 

const blePermissionName = "scope.bluetooth"; // 蓝牙对应的权限名称
const blePermissionZhName = "蓝牙"; // 蓝牙权限对应的中文名称

 

 微信文档传送门https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/AuthSetting.html

 更多参考链接https://blog.csdn.net/Losthome/article/details/122962853

标签:function,封装,微信,perName,蓝牙,res,perRequestCbFun,权限
来源: https://www.cnblogs.com/520BigBear/p/16646950.html