蓝牙低功耗

蓝牙低功耗 (BLE) 在 Android 4.3 及更高版本中提供,可在设备之间建立短连接以传输突发数据。未连接时,BLE 保持在休眠模式。与经典蓝牙相比,这使 BLE 能够提供更低的带宽和更低的功耗。它非常适合心率监测器或无线键盘等应用。要使用 BLE,设备需要配备支持 BLE 的芯片组。

实现

当前所有 BLE 应用配置文件均基于通用属性配置文件 (GATT)。当 Android 设备与 BLE 设备交互时,发送信息的设备是服务器,接收信息的设备是客户端。Android 包含适用于 BLE 的开发者 API,包括用于 GATT 服务器和 GATT 客户端之间交互的 API。要充分利用 BLE API,请实现 Android 蓝牙 HCI 要求

设备模式

使用 BLE 时,Android 设备可以充当外围设备、中央设备或两者兼而有之。外围模式允许设备发送播发数据包。中央模式允许设备扫描播发。充当外围设备和中央设备的 Android 设备可以在外围模式下发送播发的同时,与其他 BLE 外围设备通信。支持蓝牙 4.1 及更早版本的设备只能在中央模式下使用 BLE。较旧的设备芯片组可能不支持 BLE 外围模式。

BLE 扫描

使用 BLE 时,Android 设备可以更有效地定位和扫描特定的蓝牙设备。BLE API 让应用开发者可以创建过滤器来查找设备,而无需主机控制器过多参与。

位置扫描

设备的定位服务可以使用蓝牙来检测蓝牙信标,从而提供更准确的位置。以下是用户启用此功能的方式:

  1. 转到设置 > 安全和位置 > 位置
  2. 检查“位置”的开启/关闭切换开关是否处于开启位置。
  3. 转到模式
  4. 选择高精度省电模式。

在 Android 11 或更低版本中,即使只是为了查找要连接的设备,各个应用也需要位置权限才能使用 BLE 扫描。如果用户停用位置扫描,或者不授予应用位置权限,则该应用将不会收到任何 BLE 扫描结果。

从 Android 12 开始, BLUETOOTH_SCAN BLUETOOTH_ADVERTISE BLUETOOTH_CONNECT 权限允许应用扫描附近的设备,而无需请求位置权限。如需了解详情,请参阅Android 12 中新的蓝牙权限

用户可以通过转到设置 > 安全和位置 > 位置 > 扫描并禁用蓝牙扫描的切换开关来禁用系统级蓝牙后台扫描。这不会影响位置或本地设备的 BLE 扫描。

过滤扫描结果

Android 6.0 及更高版本包括蓝牙控制器上的 BLE 扫描和过滤器匹配。设备可以过滤扫描结果,并将与 BLE 设备相关的 foundlost 事件报告给应用处理器 (AP)。过滤也适用于批量扫描,这有助于节省电量,因为 BLE 扫描被卸载到固件。批量扫描减少了因 BLE 扫描设备或信标而唤醒 AP 的频率。

OnFound/OnLost 功能在蓝牙控制器中实现,然后经过测试以确认扫描中不会遗漏 BLE 设备。这可以节省电量,还可以带来以下好处:

  • 对于 OnFound 事件,主 AP 会在发现特定设备时唤醒。
  • 对于 OnLost 事件,当找不到特定设备时,AP 会唤醒。
  • 当附近设备在范围内时,框架应用收到的不必要通知会减少。
  • 持续扫描使框架应用能够在设备超出范围时收到通知。

扫描过滤器可以基于设备广告的发现(OnFound 事件)。Java 层可以指定参数,例如首次发现(或自首次发现以来指定数量的广告)。使用广告数据包内容过滤器 HCI 命令实现 BLE 过滤。