蓝牙低功耗

Android 提供了对蓝牙低功耗 (BLE) 的内置平台支持,用于中央角色,并提供了应用可以使用 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) 唯一标识,这是一个标准化的 128 位格式的字符串 ID,用于唯一标识信息。ATT 传输的属性格式化为特征服务
  • 特征
    特征包含一个值和 0 到 n 个描述符,这些描述符描述特征的值。特征可以被认为是一种类型,类似于一个类。
  • 描述符
    描述符是定义的属性,用于描述特征值。例如,描述符可以指定人类可读的描述、特征值的允许范围或特定于特征值的度量单位。
  • 服务
    服务是特征的集合。例如,您可以有一个名为“心率监测器”的服务,其中包含诸如“心率测量”之类的特征。您可以在 bluetooth.org 上找到基于 GATT 的现有配置文件和服务的列表。

角色和职责

当设备与 BLE 设备交互时,以下角色和职责适用

  • 中央与外围。这适用于 BLE 连接本身。处于中央角色的设备扫描并寻找广告,而处于外围角色的设备发布广告。

  • GATT 服务器与 GATT 客户端。这决定了两个设备在建立连接后如何相互通信。要了解区别,假设您有一部 Android 手机和一个作为 BLE 设备的活动追踪器。手机支持中央角色;活动追踪器支持外围角色。要建立 BLE 连接,您需要一个中央设备和一个外围设备。两个只支持外围角色的设备不能相互通信,两个只支持中央角色的设备也不能相互通信。

手机和活动追踪器建立连接后,它们开始相互传输 GATT 元数据。根据它们传输的数据类型,其中一个或另一个可能会充当服务器。例如,如果活动追踪器希望将传感器数据报告给手机,那么活动追踪器充当服务器可能更有意义。如果活动追踪器希望从手机接收更新,那么手机充当服务器可能更有意义。

在本主题中使用的示例中,应用程序(运行在 Android 设备上)是 GATT 客户端。应用程序从 GATT 服务器获取数据,GATT 服务器是一个支持 心率配置文件 的 BLE 心率监测器。您也可以选择设计您的应用程序以扮演 GATT 服务器角色。有关更多信息,请参阅 BluetoothGattServer