蓝牙低功耗

Android 为发挥核心作用的蓝牙低功耗 (BLE) 提供内置平台支持,并提供一些 API,应用可使用这些 API 发现设备、查询服务和传输信息。

常见用例包括:

  • 在临近设备间传输少量数据。
  • 与近程传感器交互,根据用户当前的位置为用户提供个性化体验。

传统蓝牙相比,BLE 旨在大幅降低功耗。这样一来,应用就可以与功率要求更严格的 BLE 设备(如近程传感器、心率监测器和健身设备)进行通信。

注意:当用户使用 BLE 将其设备与其他设备配对时,用户设备上的所有应用都可以访问在两台设备之间传输的数据。

因此,如果您的应用捕获敏感数据,您应实现应用层安全机制来保护这些数据的隐私。

基础知识

为了让支持 BLE 的设备在彼此之间传输数据,它们必须先形成通信通道。如需使用蓝牙 LE API,您需要在清单文件中声明多项权限。一旦您的应用获得使用蓝牙的权限,应用就需要访问 BluetoothAdapter确定设备是否支持蓝牙。如果蓝牙可用,设备将扫描附近的 BLE 设备。发现设备后,系统会连接到 BLE 设备上的 GATT 服务器来发现 BLE 设备的功能。建立连接后,可以根据可用的服务和特征通过已连接的设备传输数据

关键术语和概念

下面总结了关键的 BLE 术语和概念:

  • 通用属性配置文件 (GATT)
    GATT 配置文件是关于通过 BLE 链路发送和接收一小段数据(称为“属性”)的一般规范。当前的所有 BLE 应用配置文件都基于 GATT。如需了解详情,请参阅 GitHub 上的 Android BluetoothLeGatt 示例
  • 配置文件
    Bluetooth SIG 为 BLE 设备定义了许多配置文件。配置文件是规定设备如何在特定应用中工作的规范。请注意,一个设备可以实现多个配置文件。例如,设备可能包含心率监测器和电池电量检测器。
  • 属性协议 (ATT)
    GATT 是基于属性协议 (ATT) 构建的。这也称为 GATT/ATT。ATT 经过优化,可在 BLE 设备上运行。为此,它会尽可能减少使用的字节数量。每个属性均由通用唯一标识符 (UUID) 进行唯一标识。UUID 是一种标准化的 128 位格式,用于对信息进行唯一标识的字符串 ID。由 ATT 传输的特性会采用“特征”和服务的格式。
  • 特征
    特征包含单个值和 0-n 个描述特征值的描述符。特征可以视为一种类型,类似于类。
  • 描述符
    描述符是描述特征值的属性。例如,描述符可以指定人类可读的说明、特征值的可接受范围或特定于特征值的计量单位。
  • 服务
    服务是一系列特征的集合。例如,您可以使用一项名为“心率监测器”的服务,其中包含“心率测量”等特征。您可以在 bluetooth.org 上找到基于 GATT 的现有配置文件和服务的列表。

角色和职责

当设备与 BLE 设备交互时,需承担以下角色和责任:

  • 中央设备与外围设备。这适用于 BLE 连接本身。处于中心角色的设备会进行扫描并查找通告,处于外围设备角色的设备会发出通告。

  • GATT 服务器与 GATT 客户端。这决定了两台设备建立连接后如何相互通信。为了理解这种区别,请假设您有一部 Android 手机和一个属于 BLE 设备的 activity 跟踪器。手机支持中心角色;activity 跟踪器支持外围设备角色。要建立 BLE 连接,您需要各连接一个。仅支持外围设备的两个设备无法相互通信,仅支持中央设备的两个设备无法相互通信。

手机与 activity 跟踪器建立连接后,它们便开始将 GATT 元数据相互传输。根据它们传输的数据类型,其中一个可能会充当服务器。例如,如果活动跟踪器想要向手机报告传感器数据,则活动跟踪器可以充当服务器。如果 activity 跟踪器想要从手机接收更新,那么手机可以充当服务器。

在本主题中使用的示例中,应用(在 Android 设备上运行)是 GATT 客户端。应用从 GATT 服务器获取数据,GATT 服务器是一个支持心率配置文件的 BLE 心率监测器。您也可以将应用设计为充当 GATT 服务器角色。如需了解详情,请参阅 BluetoothGattServer