当前位置:首页 > 前端 > uniapp > 正文内容

UNIAPP微信小程序开发蓝牙接口在IOS与安卓系统下的不同

virtualman2个月前 (06-05)uniapp436

最近在做涉及车辆蓝牙开关锁的工作,在微信小程序中踩了不少关于蓝牙的坑,主要有以下三点:

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.writeBLECharacteristicValuewx.readBLECharacteristicValue等接口进行数据的读写操作。
  • 停止搜索附近的蓝牙设备(可选步骤):
    • 在连接成功或不再需要搜索时,调用wx.stopBluetoothDevicesDiscovery接口停止搜索附近的蓝牙设备。
  • 关闭蓝牙适配器(可选步骤):
    • 在应用不再需要使用蓝牙功能时,调用wx.closeBluetoothAdapter接口关闭蓝牙适配器。

 

需要注意的是,由于蓝牙设备的差异性和复杂性,具体的实现方式可能会因设备型号、蓝牙版本等因素而有所不同。因此,在实际开发中,需要参考蓝牙设备的官方文档或SDK,并结合微信小程序的蓝牙API进行开发。

 

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。