序:最近做小程序,要用到蓝牙模块的,不知道如何下手,没关系,看文档,看案例!

看文档:wx.openBluetoothAdapter(Object object) | 微信开放文档

看案例:谷歌/百度/知乎等等,只要你觉得合适,都可以去尝试!

一、小程序 BLE 开发 API 简介

操作蓝牙适配器的共有 4 个:

wx.openBluetoothAdapter 初始化蓝牙适配器 1
wx.closeBluetoothAdapter 关闭蓝牙模块 2
wx.getBluetoothAdapterState 获取本机蓝牙适配器状态 3
wx.onBluetoothAdapterStateChange 监听蓝牙适配器状态变化事件 4

扫描和获取周围 BLE 设备的有4个(操作方式与普通蓝牙一样):

wx.startBluetoothDevicesDiscovery 开始搜寻附近的蓝牙外围设备 5
wx.stopBluetoothDevicesDiscovery 停止搜寻附近的蓝牙外围设备 6
wx.getBluetoothDevices 获取所有已发现的蓝牙设备 7
wx.onBluetoothDeviceFound 监听寻找到新设备的事件 8

连接BLE设备的2个:

wx.createBLEConnection 连接低功耗蓝牙设备 9
wx.closeBLEConnection 断开与低功耗蓝牙设备的连接 10

连接成功后,读写BLE对应特征对象的数据:

wx.getConnectedBluetoothDevices 根据 uuid 获取处于已连接状态的设备 11
wx.getBLEDeviceServices 获取蓝牙设备所有 service(服务) 12
wx.getBLEDeviceCharacteristics  获取蓝牙设备所有 characteristic(特征值)13
wx.readBLECharacteristicValue  读取低功耗蓝牙设备的特征值的二进制数据值 14
wx.writeBLECharacteristicValue 向低功耗蓝牙设备特征值中写入二进制数据 15
wx.notifyBLECharacteristicValueChange  启用低功耗蓝牙设备特征值变化时的 notify 功能 16
wx.onBLECharacteristicValueChange 监听低功耗蓝牙设备的特征值变化 17
wx.onBLEConnectionStateChange 监听低功耗蓝牙连接的错误事件 18

二、小程序蓝牙连接流程

我的连接流程是这样的(代码我就不多贴了,只要你有思路、有想法,你就是黑马):

初始化蓝牙设备之前,我做了一些的骚操作(不懂的查一下):1、打开定位

/** 获取定位信息 */
getLocation: function () {let that = this;// 获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限wx.getSetting({success: function (res) {if(res.authSetting['scope.userLocation'] != undefined && res.authSetting['scope.userLocation'] != true){wx.showModal({title: '是否授权当前位置',content: '需要获取你的地理位置,请确认授权,否则无法获蓝牙',success: function(mres){if(mres.confirm){wx.openSetting({success (authData) {if(authData.authSetting['scope.userLocation'] == true){wx.showToast({title: '授权成功',icon: "success",duration: 1000})}else{wx.showToast({title: '授权失败',icon: "error",duration: 1000})}}})}else if(mres.cancel){wx.showToast({title: '授权失败',icon: "error",duration: 1000})}}})}else{// 当前位置 wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标wx.getLocation({type: 'wgs84', success: function (res) {console.log('打开地理位置')},})}},})
},

2、这个放到一个初始化方法里面,,校验一下微信的蓝牙权限是否打开:

init(){let that = this;// 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.bluetooth" 这个 scopewx.getSetting({success(res) {// (1) 微信授权已关闭,弹窗打开if (res.authSetting['scope.bluetooth'] != undefined && res.authSetting['scope.bluetooth'] == false) {wx.openSetting({success (authData) {if(authData.authSetting['scope.bluetooth'] == true){wx.showToast({title: '授权成功',icon: "success",duration: 1000})that.openBluetoothAdapter(); // 打开蓝牙适配器 }else{wx.showToast({title: '授权失败',icon: "success",duration: 1000})}}})}// (2) 'scope.bluetooth'属性不存在,需要授权if(res.authSetting['scope.bluetooth'] == undefined){wx.authorize({scope: 'scope.bluetooth',success(res){that.openBluetoothAdapter(); // 打开蓝牙适配器 }})}// (3) 已经授权if(res.authSetting['scope.bluetooth'] == true){that.openBluetoothAdapter(); // 打开蓝牙适配器 }}})
}

初始化蓝牙设备 1 =》 (1_success)成功:开始搜索附近的蓝牙外围设备 5,(1_fail)失败:获取蓝牙适配器状态 4

=》1_success:发现蓝牙设备 8 (对结果进行过滤,符合条件的设备进行连接) =》 连接到目标设备 9 ,连接成功,监听蓝牙低功耗连接状态的改变事件 18关闭蓝牙搜索 6 =》 获取蓝牙低功耗设备所有服务 12 =》 获取某个服务下所有的特征值 13 (打印一下特征值有:notify,read,write特征的),监听蓝牙低功耗设备的特征值变化 17 =》 启用低功耗蓝牙设备特征值变化时的 notify 功能 16 ;

=》1_fail:available 为true时,开始搜索附近的蓝牙外围设备 5,否则提示检查蓝牙是否打开

你会发现,有好几个是一些流程中没用到的,但是,这是不可能发生的,存在必有其道理;

​​​​​​​(1)比如:你刷新时,你不可能再重新走一遍初始化蓝牙吧,那就要用到 获取蓝牙适配器状态 3 ,判断是 获取所有已发现的蓝牙设备 8 还是 开始搜索附近的蓝牙外围设备 5;

​​​​​​​(2)比如:要你断开主动断开蓝牙连接,断开与低功耗蓝牙设备的连接 10;

(3)比如:短时间内,频繁退出或多次扫描 重新进入已连接蓝牙的小程序,在 onLoad 要用的 根据 uuid 获取处于已连接状态的设备 11(连接后,缓存 services 连接的 uuid 值),不然你已连接了设备,还一直搜不到;

(4)比如:关闭蓝牙模块 2获取所有已发现的蓝牙设备 7​​​​​​​读取低功耗蓝牙设备的特征值的二进制数据值 14​​​​​​​向低功耗蓝牙设备特征值中写入二进制数据 15 这个几个不用我多说了吧。

三、总结:

iOS 的坑是比较少一些的,Android 机的确实有很多不完善的地方,毕竟是百花齐放的嘛!

1、蓝牙搜索不到的问题:

a、设备已被其他手机连接,即设备被占用;

b、查看调用的 API 是否正常,比如:iOS 的可以,Android 的不行,API 是正常的,两者都搜不到就是有可能出错;

c、iOS 的正常,Android 的不行;那么说明 Android 的某些机型的蓝牙有些问题,先去打开系统蓝牙,搜索一遍蓝牙是否正常获取蓝牙列表,或重新开一次系统蓝牙;

小程序 蓝牙连接(出现的问题和一些解决方法)相关推荐

  1. 微信小程序蓝牙连接步骤

    微信小程序蓝牙连接步骤  注意,微信小程序的低功耗蓝牙,获取附近蓝牙时,ios和android获取的deviceid 是不一样的.android获取的是mac地址,ios获取的是经过内部转换加密过的. ...

  2. 熊晨沣蓝牙实战--小程序蓝牙连接2.0

    微信小程序蓝牙连接2.0说明: 1.本版本区分了ANDROID和IOS系统下蓝牙连接的不同方式. 2.兼容了更多情况下的链接包括: (1)未开启设备蓝牙,当监听到开启了蓝牙后自动开始连接. (2)初始 ...

  3. pos请求 微信小程序_微信小程序蓝牙连接小票打印机实例代码详解

    1.连接蓝牙 (第一次发表博客) 第一步打开蓝牙并搜索附近打印机设备// startSearch: function() { var that = this wx.openBluetoothAdapt ...

  4. java silk转mp3_微信小程序录音文件格式silk遇到的问题及解决方法

    不好意思,误导大家了,这种将silk解密的方式只是在小程序测试的时候可以,上线以后这种方法是不行的,还是需要使用解密转码.参见:https://github.com/kn007/silk-v3-dec ...

  5. 微信小程序在开发中遇到的问题与解决方法

    微信小程序在开发中遇到的问题与解决方法 参考文章: (1)微信小程序在开发中遇到的问题与解决方法 (2)https://www.cnblogs.com/zjjDaily/p/8032142.html ...

  6. 微信小程序蓝牙连接打印机

    需求:蓝牙搜索打印机并打印信息 微信小程序中需要打印订单信息 1.搜索打印机蓝牙,并链接 2.发送打印 微信小程序连接蓝牙 1.初始化蓝牙 1.1 wx.openBluetoothAdapter(Ob ...

  7. 微信小程序蓝牙连接错误分析及解决

    当打开手机蓝牙后去连接蓝牙,会出现连接不上情况,报错10003,此时不管是重启小程序还是重新关闭打开蓝牙,都不能正常连接蓝牙设备.10003是微信蓝牙连接经常碰到的问题,微信官方给出的文档中就简单的描 ...

  8. android打印机没反应了,安卓微信小程序蓝牙连接打印机,代码执行成功,打印机没有响应,苹果可以正常使用...

    - 安卓微信小程序 发送打印指令  代码显示打印成功   打印机没有响应    苹果的可以正常使用 安卓小程序发送指令代码显示发送指令成功 打印机不响应 function writeBLEValue( ...

  9. 小程序的createInnerAudioContext在iOS没有声音的解决方法

    方法一 : src里面的连接有中文的,可先通过 encodeURI 专门转码后再进行play() innerAudioContext.src = encodeURI(voicePath); 方法二 : ...

  10. 小程序在日常遇到的一些限制及解决方法

    文件大小限制 微信小程序对单个文件大小有限制,js文件不能超过2MB,其他类型文件不能超过10MB.如果开发者需要使用大型资源文件,可以考虑分割文件或使用CDN加速技术. 解决方式如下: 分割文件 将 ...

最新文章

  1. int(1) 和 int(10) 的区别?很多老程序都理解错了!
  2. 如何设计折叠样式的屏幕(类似MIGO的屏幕)
  3. eureka服务下线事件监听(自定义处理逻辑)
  4. 通过过滤器防止用户通过url访问不在权限内的菜单
  5. 解决 Cycript 信息显示不全的问题
  6. vue将原生事件绑定到组件
  7. PreparedStatement预编译的sql执行对象
  8. WebApiClient的JsonPatch局部更新
  9. 2020牛客国庆集训派对day1 C. Bob in Wonderland
  10. 学生信息系统求助_一个学生信息录入和查询的系统
  11. Linux 实操———CentOS 6 安装配置 Oracle JDK 1.8
  12. TaskBar Hider – 用快捷键手动隐藏任务栏[Windows]
  13. 第一个ncurses程序: hello world !!!
  14. java中的小知识点
  15. VS2019 + Qt ERROR MSB4181 QtRunwork 返回了false,但未记录错误
  16. c语言之fopen参数(r+,w+,a+)
  17. vfp复制表结构_有关VFP表的问题
  18. Python语言程序设计 第七周 文件和数据格式化
  19. 联想计算机怎么设置硬盘,bios设置修改硬盘模式|联想笔记本BIOS设置硬盘模式教程...
  20. 基于堆叠双向LSTM的中文诗歌生成

热门文章

  1. matlab 读取.pgm,【数字图像处理】pbm/pgm/ppm图片的读写(Matlab)
  2. vs2019,C#,MySQL创建图书管理系统3(管理员相关页面的布局和设计实现,图书显示,图书添加)
  3. html怎么转换成xmind,怎么把html导入XMind
  4. 高考0分作文精选--秋细雨PK叶闲花
  5. “eclipse”出现异常,“install new software”工具 无法使用,提示“Operation cannot be completed”错误的解决方案。
  6. MACD、KDJ、DMA等常用技术指标的python实现
  7. cad二开之不通过netload加载命令(bundle文件的使用)
  8. YOCTO开机画面修改
  9. 原生html单页应用,web单页应用
  10. 基于ffmpeg的音频转换器-rtp承载的amr转换为pcm音频流