BLE 设备读写

HAC 中 BLE 扫描、读取、订阅、取消订阅和写入命令的最佳实践。

适用场景

BLE 设备读写用于在 HAC 中调用 Android 蓝牙能力,扫描附近低功耗蓝牙设备或标签,并对指定服务、特征进行读取、订阅或写入。

常见场景包括资产盘点、现场定位、传感器数据采集、设备选择和设备控制。BLE 打印不属于本页范围,应按打印机协议单独设计。

使用前提

  • 应用运行在 HAC 中;
  • 设备支持 BLE,并已开启蓝牙;
  • Android 已授予蓝牙扫描、连接和定位相关权限;
  • 目标设备处于可发现、可连接或可通信状态;
  • 已掌握目标设备的 MAC 地址、服务 UUID、特征 UUID、读写权限和数据格式;
  • 数据解析逻辑已准备好,尤其是二进制、Base64 或厂商协议数据。

命令速查

命令用途
扫描BLE设备/标签扫描附近 BLE 设备,返回名称和 MAC 地址
扫描BLE设备/标签并填充到单元格扫描后直接写入单元格
从BLE设备读取数据从指定服务和特征读取数据
从BLE设备读取数据到单元格读取后直接写入单元格
向BLE设备订阅数据通知订阅 Notify / Indicate 回调
向BLE设备订阅数据通知并填充到单元格订阅后直接写入单元格
取消对BLE设备的订阅停止指定订阅
向BLE设备写入数据写入 Base64 数据
向BLE设备写入数据并填充到单元格写入后回填结果

扫描BLE设备/标签 从BLE设备读取数据 向BLE设备订阅数据通知 向BLE设备写入数据

推荐流程

进入 BLE 页面
-> 检查蓝牙和权限
-> 扫描附近设备
-> 用户选择目标设备
-> 保存设备 MAC 地址
-> 按业务执行读取、订阅或写入
-> 展示结果和通信状态
-> 离开页面或切换设备时取消订阅

订阅类页面:

选择目标设备
-> 执行【向BLE设备订阅数据通知】
-> 特征变化时触发子命令
-> 子命令解析数据并刷新页面
-> 离开页面时执行【取消对BLE设备的订阅】

设计要点

  • 不要一进入页面就自动读写;先扫描、选择、确认目标设备;
  • 设备名称可能为空或重复,页面应优先用 MAC 地址区分;
  • 扫描结果用于盘点时,显示已发现、已匹配、未匹配和最近发现时间;
  • 写入会改变设备状态时,要展示目标设备和指令含义,必要时二次确认;
  • 订阅、页面生命周期和设备切换必须绑定,避免旧回调写入当前页面;
  • 高频回调要做节流、去重或执行中锁定。

异常处理

异常常见原因推荐处理
扫描不到设备蓝牙未开、权限不足、距离远、设备休眠提示开启蓝牙和权限,靠近后重扫
多个同名设备名称重复或为空使用 MAC 地址和业务绑定关系区分
读取失败UUID 错误、设备断开、特征不支持读取保留目标设备,提示检查 UUID 或重连
数据无法解析协议不匹配、Base64 解码失败显示原始数据,记录设备型号和协议版本
订阅无回调模式不匹配、特征不支持 Notify / Indicate允许切换模式或重新订阅
重复回调重复订阅、旧订阅未取消、设备高频上报取消旧订阅并按业务键去重
写入失败特征不支持写入、Base64 格式错误、连接中断保留指令,允许重新编码或重试

本页目录