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 的支持存在差异
相关推荐
重生之小比特24 分钟前
【Java SE】字符串 - String类
java·开发语言·intellij-idea
mldong6 小时前
给若依加审批流,不用 Flowable
java·spring boot·架构
Wang's Blog8 小时前
Java框架快速入门: Spring Security+OAuth2之数据库和实体类的RBAC改造
java·数据库·spring
讳疾忌医丶8 小时前
深度拆解 RocksDB 内核:基于 C++17 的 FIFO 调度状态机与温度阶梯自愈设计
java·c++·算法·架构
郑州光合科技余经理8 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
毅炼8 小时前
Rover-Suite 开源发布:轻量服务注册中心与网关一体化方案
java·后端·系统架构·gateway
梦想平凡9 小时前
百游棋牌源代码开发搭建教程(十):隔离部署、备份恢复与双端验收
java·前端·javascript·数据库·源代码管理
sunshine22 girl10 小时前
Idea中如何搜索
java·ide·intellij-idea
猫吻鱼10 小时前
【AI 01】【Spring AI 基础使用】
java·spring·spring ai
梨涡泥窝10 小时前
基于SSM的校园二手交易平台的设计与实现
java·tomcat