UNIAPP微信小程序开发蓝牙接口在IOS与安卓系统下的不同
最近在做涉及车辆蓝牙开关锁的工作,在微信小程序中踩了不少关于蓝牙的坑,主要有以下三点:
1、mac地址获取方式不同
使用uni.getBluetoothDevices
或者uni.onBluetoothDeviceFound
监听附近蓝牙设备时,在安卓系统下,device_id就是设备实际mac地址,但是在IOS系统下,device_id是一个随机字符串。
如果需要与指定mac地址设备连接时,需要在蓝牙广播中,写入mac地址。比如:advertisData
字段 或者 serviceData
字段。通过new Uint8Array()
方法可以读取该字段中的信息,通常是数字+逗号分隔的。
2、流程规范程度不同
在安卓系统下,可以通过提前知道的特征值或服务直接监听蓝牙设备的Notify;但是在IOS系统下,必须要安装蓝牙接入流程,获取服务、获取特征值后,才能去监听设备。中间不可跳步。
3、获取蓝牙设备所有服务返回的内容不同
在安卓系统下,调用uni.getBLEDeviceServices 接口,不仅会返回所有的服务列表,还会把特征值也返回出来。但是在IOS系统下,必须要严格安装API,使用 uni.getBLEDeviceCharacteristics
UNIAPP蓝牙的完整流程:
- 初始化蓝牙适配器:
- 调用wx.openBluetoothAdapter接口,用于初始化蓝牙模块。
- 成功时,会返回一个包含初始化状态的res对象,失败时则返回错误信息。
- 关闭已存在的蓝牙连接(可选步骤):
- 如果在之前已经建立了蓝牙连接,并且需要重新连接,需要先关闭现有的连接。
- 调用uni.closeBluetoothAdapter接口,并在成功回调中重新初始化蓝牙。
- 开始搜索附近的蓝牙设备:
- 调用wx.startBluetoothDevicesDiscovery接口开始搜索附近的蓝牙设备。
- 通过allowDuplicatesKey参数设置是否允许重复上报同一设备。
- 成功时,会返回搜索状态,并在success回调中继续处理。
- 监听搜索到的蓝牙设备:
- 使用wx.onBluetoothDeviceFound接口来监听搜索到的蓝牙设备。
- 在该接口的回调函数中,可以通过蓝牙设备的名称或ID来识别需要连接的设备。
- 获取蓝牙设备列表(可选步骤):
- 调用wx.getBluetoothDevices接口获取已搜索到的蓝牙设备列表。
- 可以在此处根据设备名称、状态等进一步筛选设备。
- 连接蓝牙设备:
- 调用wx.createBLEConnection接口来连接指定的蓝牙设备。
- 需要传入设备的deviceId作为参数。
- 连接成功后,可以进行后续的数据传输等操作。
- 监听蓝牙设备状态变化(可选步骤):
- 使用wx.onBLEConnectionStateChange接口来监听蓝牙设备连接状态的变化。
- 可以在此处处理连接断开、连接异常等情况。
- 与蓝牙设备进行数据交互(根据具体需求):
- 连接成功后,可以根据蓝牙设备的服务UUID、特征值UUID等参数,使用wx.writeBLECharacteristicValue、wx.readBLECharacteristicValue等接口进行数据的读写操作。
- 停止搜索附近的蓝牙设备(可选步骤):
- 在连接成功或不再需要搜索时,调用wx.stopBluetoothDevicesDiscovery接口停止搜索附近的蓝牙设备。
- 关闭蓝牙适配器(可选步骤):
- 在应用不再需要使用蓝牙功能时,调用wx.closeBluetoothAdapter接口关闭蓝牙适配器。
需要注意的是,由于蓝牙设备的差异性和复杂性,具体的实现方式可能会因设备型号、蓝牙版本等因素而有所不同。因此,在实际开发中,需要参考蓝牙设备的官方文档或SDK,并结合微信小程序的蓝牙API进行开发。