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) 唯一标识,UUID是用于唯一标识信息的字符串ID的标准化128位格式。ATT传输的属性格式化为特征和服务。
- 特征
- 特征包含单个值和0-n个描述符,这些描述符描述特征的值。可以将特征视为一种类型,类似于类。
- 描述符
- 描述符是定义的属性,用于描述特征值。例如,描述符可以指定人类可读的描述、特征值的可接受范围或特定于特征值的度量单位。
- 服务
- 服务是特征的集合。例如,您可以有一个名为“心率监测器”的服务,其中包含“心率测量”等特征。您可以在bluetooth.org上找到基于GATT的现有配置文件和服务的列表。
角色和职责
当设备与BLE设备交互时,角色和职责以两种不同的方式划分
中央与外设。 这适用于BLE连接本身——处于中央角色的设备扫描以查找广告,而处于外设角色的设备则进行广告宣传。两个仅支持外设角色的设备无法相互通信,两个仅支持中央角色的设备也无法相互通信。
GATT服务器与GATT客户端。 这决定了两个设备在建立连接后如何相互通信。处于客户端角色的设备发送数据请求,而处于服务器角色的设备则满足这些请求。
要了解中央-外设和服务器-客户端角色划分之间的区别,请考虑一个示例,其中您有一部Android手机和一个能够启用BLE的活动追踪器,该追踪器将传感器数据报告回手机。
手机——中央设备——主动扫描BLE设备。活动追踪器——外设设备——进行广告宣传并等待接收连接请求。
手机和活动追踪器建立连接后,它们开始相互传输GATT元数据。在这种情况下,手机上运行的应用发送数据请求,因此它充当GATT客户端。活动追踪器满足这些请求,因此它充当GATT服务器。
应用的另一种设计可能涉及手机改为扮演GATT服务器角色。有关更多信息,请参阅BluetoothGattServer
。