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 的支持存在差异
相关推荐
好家伙VCC12 分钟前
# 发散创新:用 Rust构建高性能游戏日系统,从零实现事件驱动架构 在现代游戏开发中,**性能与可扩展性**是核心命题。传统基于
java·python·游戏·架构·rust
爱笑的源码基地19 分钟前
门诊his系统源码,中西医结合的数字化门诊解决方案
java·spring boot·源码·二次开发·门诊系统·云诊所系统·诊所软件源码
庞轩px20 分钟前
缓存Key设计的“七要七不要”
java·jvm·redis·缓存
小璐资源网20 分钟前
Java 21 新特性实战:虚拟线程详解
java·开发语言·python
SimonKing31 分钟前
全网爆火的OpenClaw保姆级教程Linux版,它来了。
java·后端·程序员
于慨39 分钟前
tauri
java·服务器·前端
WZTTMoon40 分钟前
从互斥锁到无锁,Java 20年并发安全进化史
java·python·安全
2501_918126911 小时前
学习所有6502写游戏控制器的语句
java·linux·网络·汇编·嵌入式硬件
青春易逝丶1 小时前
策略模式
java·开发语言·策略模式
贼爱学习的小黄1 小时前
NC BIP参照开发
java·前端·nc