蓝牙低功耗

Android 4.3 及更高版本中提供的蓝牙低功耗 (BLE) 功能可在多个设备之间实现短促连接,以传输暴增的数据。未建立连接时,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_SCANBLUETOOTH_ADVERTISEBLUETOOTH_CONNECT 权限允许应用扫描附近的设备,而无需请求位置信息权限。如需了解详情,请参阅 Android 12 中的新蓝牙权限

用户可以通过以下方式停用系统级蓝牙后台扫描:依次转到设置 > 安全性和位置信息 > 位置信息 > 扫描,然后关闭蓝牙扫描开关。这不会影响对位置或本地设备的 BLE 扫描。

过滤扫描结果

Android 6.0 及更高版本在蓝牙控制器上提供 BLE 扫描和过滤器匹配功能。设备可以过滤扫描结果,并将与 BLE 设备相关的 foundlost 事件报告给应用处理器 (AP)。过滤功能也适用于批量扫描,这将有助于节省电量,因为 BLE 扫描已分流到固件中。批量扫描可降低 AP 因设备或信标的 BLE 扫描而唤醒的频率。

OnFound/OnLost 功能在蓝牙控制器中实现,然后经过测试以确认在扫描过程中未错过 BLE 设备。这样可以节省电量,并且还有以下好处:

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

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