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 工作流程:状态检查 → 回调注册 → 扫描 → 连接 → 初始化 → 交互(读/写/通知)。