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 的支持存在差异
相关推荐
Billow_lamb40 分钟前
Spring Boot2.x.x 全局错误处理
java·spring boot·后端
编程火箭车44 分钟前
【Java SE 基础学习打卡】14 Java 注释
java·编程规范·代码注释·api文档·代码可读性·javadoc·文档注释
雁于飞1 小时前
分布式基础
java·spring boot·分布式·spring·wpf·cloud native
q***2511 小时前
java进阶1——JVM
java·开发语言·jvm
while(1){yan}1 小时前
线程的状态
java·开发语言·jvm
豐儀麟阁贵1 小时前
8.3 Java常见的异常类
java·开发语言
20岁30年经验的码农1 小时前
Java JVM 技术详解
java·jvm·压力测试
1***81531 小时前
C在游戏中的场景管理
java·jvm·游戏
q***44811 小时前
Java进阶10 IO流
java·开发语言
济宁雪人1 小时前
Java安全基础——文件系统安全
java·开发语言·安全