07_微信小程序-BLE低功耗蓝牙开发-权限申请

1. 在开发BLE之前,需要先申请相关权限,否则初始化蓝牙的时候,会返回错误码10001。授权相关可参考文档:

授权 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html#scope-%E5%88%97%E8%A1%A82. 权限申请流程

            1)检查该权限是否申请   wx.getSetting

            2)如果没有,调用接口申请权限   wx.authorize

            3)如果用户点击拒绝,弹出提示框,让用户在小程序设置中打开对应的权限

3. 代码实现

 1)我在index目录下新增了一个permisson.js文件,专门用来请求权限和检测权限

/**
* 检测是否有对应的权限,通过回调函数返回结果
* @param {String} perName 权限名称
* @param {function} perResultCbFun 结果回调函数,参数为true表示成功
*/
function permission_check(perName, perResultCbFun) {
  // var arr = (typeof perArr != "object") ? [perArr] : perArr; // 确保参数总是数组
  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: '申请权限',
              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);
                  }
                }
              }
            })
          }
        })
      }
    }
  )
}

导出这两个接口,否则其他js文件没有办法调用到

module.exports = {
  permission_check,
  permission_request
}

在index.js引用该文件,并在页面加载的时候,申请权限

var permisson = require('permission.js');

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

  onLoad() {
    //请求相关权限
    permisson.permission_request(blePermissionName, blePermissionZhName);
  },

实际效果:

1)用户第一次进入小程序,会弹出请求权限的提示框

        

2)如果用户点击拒绝,会弹出请求打开设置

         

3)如果用户点击确认,就会进入到小程序设置页面

        

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值