当前位置:   article > 正文

微信小程序蓝牙授权完整流程_小程序 opensetting 蓝牙

小程序 opensetting 蓝牙

1.用到的api

        1.1 authorize:

                提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口。如果用户之前已经同意授权,则不会出现弹窗,直接返回成功。更多用法详见 用户授权。 > 小程序插件可以使用 wx.authorizeForMiniProgram

        1.2 getSetting

                获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限

        1.3 openSetting

                调起客户端小程序设置界面,返回用户设置的操作结果。设置界面只会出现小程序已经向用户请求过的权限

        1.4 getSystemInfoSync

                获取系统信息。由于历史原因,wx.getSystemInfo 是异步的调用格式,但是是同步返回,需要异步获取系统信息请使用 wx.getSystemInfoAsync

        1.5 openBluetoothAdapter

                初始化蓝牙模块。iOS 上开启主机/从机(外围设备)模式时需分别调用一次,并指定对应的 mode

  • 其他蓝牙相关 API 必须在 wx.openBluetoothAdapter 调用之后使用。否则 API 会返回错误(errCode=10000)。

  • 在用户蓝牙开关未开启或者手机不支持蓝牙功能的情况下,调用 wx.openBluetoothAdapter 会返回错误(errCode=10001),表示手机蓝牙功能不可用。此时小程序蓝牙模块已经初始化完成,可通过 wx.onBluetoothAdapterStateChange 监听手机蓝牙状态的改变,也可以调用蓝牙模块的所有API。

        1.6 openAppAuthorizeSetting

                跳转系统微信授权管理页

        1.7 openSystemBluetoothSetting

                跳转系统蓝牙设置页。仅支持安卓

        1.8 getBluetoothAdapterState       

                 获取本机蓝牙适配器状态

2.api对应效果图

authorize/openBluetoothAdapter

openSetting

        ⚠️注意:这里需要区分用户的微信应用蓝牙授权和系统蓝

根据openBluetoothAdapter失败返回的state区分ios系统下情况

state=3 =》 微信应用蓝牙授权

state=4 =》系统蓝牙

 3.思维导图

        ⚠️注意:完整的授权流程需要区分ios和android

4.代码 (这里以Taro为例)

  1. const bringBluetoothRight = () => {
  2. return new Promise((resolve, reject) => {
  3. getSetting({
  4. success: (res) => {
  5. if (res.authSetting['scope.bluetooth']) {
  6. // 判断微信蓝牙是否授权
  7. resolve(wechatBluetoothAuthUtils());
  8. } else {
  9. Taro.authorize({
  10. scope: 'scope.bluetooth',
  11. success: () => {
  12. // 同意微信授权
  13. resolve(wechatBluetoothAuthUtils());
  14. },
  15. fail: () => {
  16. showModal({
  17. content: 'xxx想要开启蓝牙完成连接,请开启小程序蓝牙授权',
  18. showCancel: false,
  19. success: () => {
  20. openSetting({
  21. success: (res) => {
  22. if (res.authSetting['scope.bluetooth']) {
  23. // 同意微信授权
  24. resolve(wechatBluetoothAuthUtils());
  25. }
  26. },
  27. });
  28. },
  29. });
  30. },
  31. });
  32. }
  33. },
  34. });
  35. });
  36. };
  37. const wechatBluetoothAuthUtils = () => {
  38. const { bluetoothEnabled, platform } = getSystemInfoSync();
  39. // 设备为IOS时,微信蓝牙是否开启
  40. if (platform === 'ios') {
  41. return new Promise((resolve, reject) => {
  42. // 初始化蓝牙模块(用openBluetoothAdapter 方法解决部分ios设备,授权蓝牙失败的问题)
  43. Taro.openBluetoothAdapter({
  44. success: () => {
  45. // 开启蓝牙功能 =》 初始化拾果sdk
  46. resolve(true);
  47. },
  48. fail: (openBlueFail) => {
  49. if (openBlueFail.state === 3) {
  50. // 说明微信应用蓝牙未授权
  51. showModal({
  52. content: '检测到您未允许微信访问手机蓝牙权限,是否打开系统设置?',
  53. showCancel: false,
  54. confirmText: '前往设置',
  55. success: () => {
  56. // 跳转微信应用权限
  57. openAppAuthorizeSetting();
  58. },
  59. });
  60. } else if (openBlueFail.state === 4) {
  61. // 说明系统蓝牙未开启
  62. showModal({
  63. content:
  64. '蓝牙设置 - 小程序需要通过蓝牙搜索和连接设备,请确认手机蓝牙功能是否已开启?',
  65. showCancel: false,
  66. confirmText: '我已开启',
  67. success: async () => {
  68. const { bluetoothEnabled, platform } = getSystemInfoSync();
  69. if (bluetoothEnabled) {
  70. // 开启蓝牙功能
  71. resolve(true);
  72. } else {
  73. toast({ title: '手机蓝牙未开启' });
  74. }
  75. },
  76. });
  77. }
  78. },
  79. });
  80. });
  81. } else {
  82. return new Promise(function (resolve, reject) {
  83. // andriod
  84. if (!bluetoothEnabled) {
  85. // 说明系统蓝牙未开启
  86. showModal({
  87. content: '蓝牙设置 - 小程序需要通过蓝牙搜索和连接设备,请确认手机蓝牙功能是否已开启?',
  88. showCancel: false,
  89. confirmText: '我已开启',
  90. success: async () => {
  91. const { bluetoothEnabled, platform } = getSystemInfoSync();
  92. if (bluetoothEnabled) {
  93. // 开启蓝牙功能
  94. resolve(true);
  95. } else {
  96. toast({ title: '手机蓝牙未开启' });
  97. }
  98. },
  99. });
  100. } else {
  101. // 开启蓝牙功能
  102. resolve(true);
  103. }
  104. });
  105. }
  106. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/895651
推荐阅读
相关标签
  

闽ICP备14008679号