Android 为发挥核心作用的蓝牙低功耗 (BLE) 提供内置平台支持,并提供可供应用用于发现设备、查询服务和传输信息的 API。
常见用例包括:
- 在临近设备间传输少量数据。
- 与近程传感器交互,以便为用户提供基于其当前位置的自定义体验。
与传统蓝牙不同,BLE 旨在显著降低功耗。这样一来,应用便可与功率要求更严格的 BLE 设备(例如近程传感器、心率监测器和健身设备)进行通信。
注意:当用户使用 BLE 将其设备与其他设备配对时,用户设备上的所有应用都可以访问在这两个设备间传输的数据。
因此,如果您的应用捕获敏感数据,您应实现应用层安全以保护此类数据的私密性。
基础知识
为了让支持 BLE 的设备能够在彼此之间传输数据,它们必须先形成通信通道。若要使用 Bluetooth 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) 进行唯一标识,后者是用于对信息进行唯一标识的字符串 ID 的 128 位标准化格式。ATT 传输的属性采用特征和服务格式。
- 特征
- 特征包含一个值和 0 至多个描述特征值的描述符。您可将特征理解为类型,后者与类类似。
- 描述符
- 描述符是描述特征值的已定义属性。例如,描述符可指定人类可读的描述、特征值的可接受范围或特定于特征值的度量单位。
- 服务
- 服务是一系列特征。例如,您可能有一项名为“心率监测器”的服务,其中包含“心率测量”等特征。您可以在 bluetooth.org 上找到基于 GATT 的现有配置文件和服务的列表。
角色和职责
当设备与 BLE 设备交互时,角色和职责会以两种不同的方式划分:
中央与外围。这适用于 BLE 连接本身:担任中央角色的设备进行扫描、寻找广播;外围设备发出广播。如果两个设备都仅支持外围角色,则无法相互通信;如果两个设备都仅支持中央角色,也无法相互通信。
GATT 服务器与 GATT 客户端。这决定两个设备建立连接后如何相互通信。处于客户端角色的设备发送数据请求,处于服务器角色的设备执行这些请求。
如需了解中心-外围设备角色划分与服务器-客户端角色划分的区别,请考虑以下示例:您有一台 Android 手机和一台支持 BLE 的活动追踪器,该追踪器会将传感器数据报告回手机。
手机(中央设备)会主动扫描 BLE 设备。活动追踪器(即外围设备)会进行广告宣传,并等待收到连接请求。
手机与活动追踪器建立连接后,它们便开始相互传送 GATT 元数据。在本例中,手机上运行的应用会发送数据请求,因此它充当 GATT 客户端。活动追踪器会执行这些请求,因此它充当 GATT 服务器。
应用的另一种设计可能使手机扮演 GATT 服务器角色。如需了解详情,请参阅 BluetoothGattServer
。