低功耗蓝牙

Android 内置了对低功耗蓝牙 (BLE) 中心角色的平台支持,并提供了应用可用于发现设备、查询服务和传输信息的 API。

常见用例包括:

  • 在附近设备之间传输少量数据。
  • 与接近传感器交互,根据用户的当前位置提供定制体验。

经典蓝牙相比,BLE 旨在显著降低功耗。这使得应用能够与功耗要求更严格的 BLE 设备进行通信,例如接近传感器、心率监测器和健身设备。

注意:当用户使用 BLE 将其设备与另一设备配对时,这两个设备之间通信的数据可供用户设备上的所有应用访问。

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

基础知识

启用 BLE 的设备若要相互传输数据,必须首先建立通信通道。使用低功耗蓝牙 API 需要您在清单文件中声明多项权限。应用获得使用蓝牙的权限后,需要访问 BluetoothAdapter确定设备上是否提供蓝牙。如果蓝牙可用,设备将扫描附近的 BLE 设备。找到设备后,通过连接到 BLE 设备上的 GATT 服务器来发现 BLE 设备的功能。建立连接后,可根据可用服务和特性与连接的设备传输数据

关键术语和概念

以下是 BLE 关键术语和概念的摘要:

  • 通用属性配置文件 (GATT)
    GATT 配置文件是一种通用规范,用于通过 BLE 链接发送和接收称为“属性”的短数据片段。所有当前的 BLE 应用配置文件都基于 GATT。请查看 GitHub 上的Android BluetoothLeGatt 示例以了解更多信息。
  • 配置文件
    蓝牙技术联盟为 BLE 设备定义了许多配置文件。配置文件是设备在特定应用中如何工作的规范。请注意,一个设备可以实现多个配置文件。例如,一个设备可以包含心率监测器和电量检测器。
  • 属性协议 (ATT)
    GATT 构建在属性协议 (ATT) 之上。这也被称为 GATT/ATT。ATT 经过优化,可在 BLE 设备上运行。为此,它尽可能少地使用字节。每个属性都由通用唯一标识符 (UUID) 唯一标识,UUID 是一种用于唯一标识信息的标准化 128 位字符串 ID 格式。ATT 传输的属性格式为特性服务
  • 特性
    特性包含一个值和 0 到 n 个描述符,这些描述符描述特性的值。特性可以被视为一种类型,类似于一个类。
  • 描述符
    描述符是定义用于描述特性值的属性。例如,描述符可以指定人类可读的描述、特性值的可接受范围,或者特定于特性值的度量单位。
  • 服务
    服务是特性的集合。例如,您可以有一个名为“心率监测器”的服务,其中包含“心率测量”等特性。您可以在 bluetooth.org 上找到现有基于 GATT 的配置文件和服务的列表。

角色和职责

当设备与 BLE 设备交互时,角色和职责以两种不同方式划分:

  • 中央设备与外围设备。这适用于 BLE 连接本身——扮演中央角色的设备进行扫描,寻找广播,而扮演外围角色的设备进行广播。两个仅支持外围角色的设备无法相互通信,两个仅支持中央角色的设备也无法相互通信。

  • GATT 服务器与 GATT 客户端。这决定了两个设备建立连接后如何相互通信。扮演客户端角色的设备发送数据请求,扮演服务器角色的设备满足这些请求。

为了理解中央设备-外围设备和服务器-客户端角色划分之间的区别,请考虑一个示例:您拥有一部 Android 手机和一个启用 BLE 的活动追踪器,该追踪器将传感器数据报告回手机。

  • 手机(中央设备)主动扫描 BLE 设备。活动追踪器(外围设备)广播并等待接收连接请求。

  • 手机和活动追踪器建立连接后,它们开始相互传输 GATT 元数据。在这种情况下,手机上运行的应用发送数据请求,因此它充当 GATT 客户端。活动追踪器满足这些请求,因此它充当 GATT 服务器

应用的另一种设计可能涉及手机扮演 GATT 服务器角色。有关更多信息,请参阅 BluetoothGattServer