Android ble理解

Android BLE 基础概念解析

核心角色:Central 与 Peripheral

BLE 通信采用不对称的客户端-服务器模型:

  1. Central(中心设备)

    • 角色:主动扫描并连接其他设备(通常是手机、平板等)
    • Android 实现:应用程序即 Central
    • 类比:商场中主动寻找店铺的顾客
  2. Peripheral(外围设备)

    • 角色:被动广播自身存在(如传感器、智能设备等)
    • Android 实现:自 API 21 起可充当 Peripheral(实现较复杂)
    • 类比:播放广告吸引顾客的商场店铺

关键点:大多数场景中,Android 手机是 Central,连接的智能设备是 Peripheral。

客户端-服务器模型

在 BLE 的 GATT 协议中:

  • 手机 (Central) = 客户端 (Client)

  • 智能设备 (Peripheral) = 服务器 (Server)

核心架构:GATT 协议

连接建立后,所有通信通过 GATT 协议进行,其分层结构如下:

  • Profile:标准应用规范(如心率监测),定义必须包含的服务
  • Service:独立功能单元(如电池服务),包含相关数据
  • Characteristic
    • 基础通信实体
    • 包含 Value(实际数据)和 Properties(操作权限)
    • 支持 READ/WRITE/NOTIFY/INDICATE 等操作
  • Descriptor
    • 特征元数据
    • 关键 CCCD 用于启用/禁用 NOTIFY/INDICATE

结构关系:Profile → Service → Characteristic → Value & Descriptor

Android BLE 关键类

类名 功能 关键操作
BluetoothAdapter 代表蓝牙硬件 蓝牙开关、设备扫描
BluetoothDevice 远端设备 connectGatt() 建立连接
BluetoothGatt 通信核心 服务发现、读写操作
BluetoothGattService GATT 服务 getCharacteristic()
BluetoothGattCharacteristic GATT 特征 读写 Value
BluetoothGattDescriptor 特征描述符 配置通知
BluetoothLeScanner 设备扫描 ScanCallback 处理结果

典型交互流程

  1. 权限检查

    • 声明 BLUETOOTH 相关权限
    • 注意 Android 各版本的权限变化
  2. 设备扫描

    • 获取 BluetoothLeScanner
    • 配置 ScanSettings/ScanFilter
    • 在 ScanCallback 中处理结果
  3. 设备连接

    • 调用 connectGatt()
    • 通过 BluetoothGattCallback 监听状态
  4. 服务发现

    • connected 状态调用 discoverServices()
    • 在 onServicesDiscovered 中处理
  5. 数据通信

    • 读/写 Characteristic
    • 开启通知: a) 启用本地通知 b) 配置 CCCD 描述符 c) 接收 onCharacteristicChanged
  6. 断开连接

    • 调用 disconnect()
    • 执行 close() 释放资源

重要注意事项

  • 所有操作均为异步执行
  • BluetoothGatt 非线程安全,建议使用操作队列
  • 注意标准 UUID 与自定义 UUID 的区别
  • 不同 Android 版本对 BLE 的支持存在差异
相关推荐
若水不如远方7 分钟前
一文讲透单点登录原理(SSO):从同域共享到跨域票据
java·后端
不懂的浪漫7 分钟前
mqtt-plus 架构解析(七):动态订阅与重连恢复,为什么能走同一条协调路径
java·物联网·mqtt·架构
无巧不成书021810 分钟前
Unicode编码机制全解析:从核心原理到Java 实战
java·开发语言·java字符编码·unicode 15.1码点
mu_guang_14 分钟前
计算机体系结构3-cache一致性和内存一致性的区别
java·开发语言·计算机体系结构
海兰17 分钟前
使用 Spring AI 打造企业级 RAG 知识库第一部分:核心基础
java·人工智能·spring
恼书:-(空寄20 分钟前
责任链模式实现流程动态编排
java·责任链模式
星原望野20 分钟前
java:volatile关键字的作用
java·开发语言·volatile
XiYang-DING27 分钟前
【Java】Map和Set
java·开发语言
菜菜小狗的学习笔记31 分钟前
八股(二)Java集合
java·开发语言
星乐a32 分钟前
String 不可变性与常量池深度解析
java·开发语言