跳转至

BLE 连接与数据流概述

本图描述了应用程序中 BLE 操作的完整生命周期——从检查手机的 BLE 状态、扫描和连接,直至设备就绪后的数据读写。

┌──────────┐
│   START  │
└────┬─────┘
     │
     ▼
┌─────────────────────┐
│Check BLE Status     │ ──────> getPhoneBleStatus()
└────┬────────────────┘
     │
     ▼
┌─────────────────────┐
│ Register Callbacks  │
│ - findDeviceCallback│
│ - connectSuccess    │
│ - connectFail       │
└────┬────────────────┘
     │
     ▼
┌─────────────────────┐
│  Start BLE Scan     │ ──────> startBleScan()
└────┬────────────────┘         ↓
     │                           ↓ (Scanning...)
     │                    findDeviceCallback
     │                      ↓  ↓  ↓  ↓  ↓
     │                    [Device List]
     ▼
┌─────────────────────┐
│   Stop Scan         │ ──────> stopBleScan()
└────┬────────────────┘
     │
     ▼
┌─────────────────────┐
│ Connect to Device   │ ──────> connBleByMacAddress()
└────┬────────────────┘
     │
     ├──────────────┬──────────────┐
     ▼              ▼              ▼
  Success      connectFail    Timeout
     │
     ▼
┌─────────────────────┐
│ Initialize Data     │ ──────> initBleData()
└────┬────────────────┘         ↓
     │                    Progress Updates
     │                      ↓  ↓  ↓  ↓
     │                    [Loading...]
     ▼
┌─────────────────────┐
│ Data Ready          │ ──────> onCompleteCallback
└────┬────────────────┘
     │
     ├──────────────┬──────────────┐
     ▼              ▼              ▼
┌─────────┐   ┌─────────┐   ┌─────────┐
│  Read   │   │  Write  │   │ Notify  │
│  Data   │   │  Data   │   │  Enable │
└─────────┘   └─────────┘   └─────────┘
     │              │              │
     └──────────────┴──────────────┘
                    │
                    ▼
              ┌──────────┐
              │   END    │
              └──────────┘
从整体来看,流程如下:

1. 检查 BLE 状态 → getPhoneBleStatus()

  • 验证手机支持 BLE,且蓝牙已开启(以及任何所需权限均已授予)。
  • 如果 BLE 不可用或已禁用,流程应在此停止并提示用户。

2. 注册回调

  • 注册 JavaScript 处理器,使原生层可以将事件推送到 WebView:
    • findDeviceCallback – 扫描过程中每发现一个设备时调用。
    • connectSuccess – 成功连接到设备时调用。
    • connectFail – 连接尝试失败时调用(包括超时或错误)。 这使整个流程由事件驱动,而非使用轮询。

3. 开始 BLE 扫描 → startBleScan()

  • 开始扫描附近的 BLE 设备。
  • 扫描过程中:
    • 原生代码发现设备。
    • 对于每个设备,原生层调用 findDeviceCallback 并传入设备详情(如名称、MAC 地址、RSSI)。
    • WebView 更新显示给用户的设备列表。

4. 停止扫描 → stopBleScan()

  • 用户从列表中选择设备后,停止扫描以节省电量并减少干扰。
  • 所选设备(通常通过 MAC 地址识别)将用于连接步骤。

5. 连接到设备 → connBleByMacAddress()

  • 使用 MAC 地址发起与所选设备的连接。
  • 此处有三种可能结果:
    • Success(成功)→ 原生代码调用 connectSuccess 回调。
    • Failure(失败)→ 调用 connectFail 回调(如设备拒绝连接、超出范围)。
    • Timeout(超时)→ 视为失败,通常也通过 connectFail 报告,附带超时原因。
  • 连接成功后,流程进入数据初始化阶段。

6. 初始化数据 → initBleData()

  • 连接成功后,应用准备设备以供使用:
    • 发现服务和特征。
    • 为读/写/通知操作建立内部映射。
    • 可选地从设备加载部分初始值。 在此步骤中,UI 通常显示"加载中……",并随着原生代码报告初始化进度而更新。

7. 数据就绪 → onCompleteCallback

  • 初始化完成后,原生层通知 WebView(如通过 onCompleteCallback)。
  • 此时:
    • 加载状态移除。
    • 主要设备控件启用,用户现在可以与设备交互。

8. 读取 / 写入 / 通知

  • 设备完全初始化后,应用支持三种主要交互类型:
    • Read Data(读取数据)– 从特征中读取当前值(如传感器值、电池电量)。
    • Write Data(写入数据)– 向设备发送命令或配置值。
    • Notify Enable(启用通知)– 订阅特征通知,使设备可以自动推送更新。
  • 这些操作可根据需要重复执行,直到用户断开连接或离开界面,此时流程实际上到达 END,如有需要可重新启动。

该流程确保了清晰的逐步 BLE 工作流程:状态检查 → 回调注册 → 扫描 → 连接 → 初始化 → 交互(读/写/通知)。