ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-09-01 16:33:38  阅读:168  来源: 互联网

标签:function 封装 微信 perName 蓝牙 res perRequestCbFun 权限


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

 

 点击按钮=>

 

 

 用户拒绝后=>

 

 

 

 

代码:

<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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有