蓝牙服务

通过蓝牙,设备可以传输可用于互动服务(如音频、消息和电话)的数据。用于不同服务的蓝牙配置文件可以在 include/hardware/bluetooth.h 中找到。

音频

蓝牙连接让用户可以在支持蓝牙的设备上流式传输音频。对于大多数音频用例,Android 设备是源,而渲染设备(如扬声器或耳机)是接收器。

绝对音量控制

在 Android 6.0 及更高版本中,Android 蓝牙堆栈允许源设备设置绝对音量,让用户可以精确控制音频音量。源设备将未衰减的音频和音量信息发送到接收器。然后,接收器根据音量信息放大音频,以便用户听到准确的播放音量。

源设备还可以注册音量通知。当使用接收器上的控件进行音量更改时,接收器会向源设备发送通知。这让源设备可以在用户界面上准确显示音量信息。

绝对音量控制默认处于开启状态。要停用绝对音量控制,用户可以转到设置 > 系统 > 开发者选项,然后选择停用绝对音量的开关。

高级音频编解码器

在 Android 8.0 中,使用高级音频分发配置文件 (A2DP) 的设备可以支持其他音频编解码器。当设备连接到远程音频接收器时,蓝牙堆栈支持音频编解码器协商。此协商会选择发送器和接收器都支持的最佳编解码器,以提供高品质音频。选择后,所有音频都将通过所选编码器路由,然后发送到接收器。

实现

运行 Android 8.0 且支持 A2DP 的设备会自动获得额外的编解码器支持。设备制造商可能需要为某些专有音频编解码器获取单独的许可和二进制代码块。除了 SBC 之外,Android 8.0 还支持以下编解码器

  • AAC
  • aptX
  • aptX HD
  • LDAC

设备制造商可以选择其设备尝试首先使用的编解码器。通过更改 res/values/config.xml 中的以下值来设置编解码器优先级

  <!-- Configuring priorities of A2DP source codecs. Larger value means
          higher priority. Value -1 means the codec is disabled.
          Value 0 is reserved and should not be used here. Enabled codecs
          should have priorities in the interval [1, 999999], and each
          priority value should be unique. -->
        <integer name="a2dp_source_codec_priority_sbc">1001</integer>
        <integer name="a2dp_source_codec_priority_aac">2001</integer>
        <integer name="a2dp_source_codec_priority_aptx">3001</integer>
        <integer name="a2dp_source_codec_priority_aptx_hd">4001</integer>
        <integer name="a2dp_source_codec_priority_ldac">5001</integer>
      

LDAC 认证

Android 开源项目包含 Sony 的 LDAC 编解码器编码器,因此无需单独的许可或来自 Sony 的 Blob。要将 LDAC 编解码器集成到您的设备中,请在 Sony 注册并遵循 LDAC 认证流程

LDAC 认证网站上有关于 LDAC 的文档,例如规范和操作手册。LDAC 网站还为移动设备和平板电脑设备提供验证和互操作性测试。将通过测试结果发送给 Sony 以完成 LDAC 认证。

用户界面功能

除了额外的编解码器支持外,Android 8.0 还提供了一个面向用户的设置,用于禁用高清 (HD) 蓝牙音频编解码器。

  1. 导航至设置 > 连接的设备 > 蓝牙
  2. 点击您要禁用编解码器的接收器旁边的齿轮图标。
  3. 取消选中高清音频复选框。

自定义设置的设备制造商应为用户提供禁用高清编解码器的方法。

消息

通过蓝牙发送消息让用户可以从远程设备读取、浏览和撰写短信。此功能通常在将手机连接到车载信息娱乐系统时使用。

电话

蓝牙电话服务让用户可以将通话和联系人从手机流式传输和同步到另一个蓝牙设备。这些功能通常用于驾驶时的免提通话。

在 Android 8.0 中,蓝牙支持带内铃声。当通过蓝牙连接的手机收到来电时,铃声将在接收器上播放。在设置 > 系统 > 开发者选项中,选择启用带内响铃的开关,以启用带内铃声。

蓝牙功能

为了实现蓝牙服务,蓝牙堆栈支持各种配置文件和功能。

蓝牙配置文件

以下配置文件可用于蓝牙

功能 Android 版本
名称 描述 6.0 7.0 7.1 7.1.2 8.0
SAP SIM 卡访问配置文件 1.1 1.1 1.1 1.1 1.1
MAP 短信消息访问配置文件 1.2 1.2 1.2 1.2 1.2
OPP 对象推送配置文件 1.1 1.1 1.1 1.1 1.2
基于 L2CAP 的 OBEX 基于逻辑链路控制和适配协议的对象交换
HFP 音频网关 免提配置文件 1.6 1.6 1.7 1.7 1.7
HSP 耳机配置文件 1.2 1.2 1.2 1.2 1.2
A2DP 高级音频分发配置文件 1.2 1.2 1.2 1.2 1.2
AVRCP 音频/视频远程控制配置文件 1.3 1.3 1.3 1.3 1.4
HID 人机接口设备配置文件 1.0 1.0 1.0 1.0 1.0
PBAP 电话簿访问配置文件 1.1.1 1.1.1 1.1.1 1.1.1 1.2
HDP 健康设备配置文件 1.0 1.0 1.1 1.1 1.1
SPP 串行端口配置文件 1.2 1.2 1.2 1.2 1.2
PAN / BNEP 个人区域网络配置文件 / 蓝牙网络封装协议 1.0 1.0 1.0 1.0 1.0
DIP 设备 ID 配置文件 1.3 1.3 1.3 1.3 1.3
HOGP 1.0 基于 GATT 的 HID
高清音频1 请参阅上面的“高级音频编解码器”

1 实现高清音频取决于设备的功能,包括源设备和接收器设备。

蓝牙低功耗功能

以下功能可用于 BLE

功能 Android 版本
名称 6.0 7.0 7.1 7.1.2 8.0
BR/EDR 安全连接 4.1 4.1 4.1 4.1 5.0
LE 隐私 4.2 4.2 4.2 4.2 5.0
LE 安全连接 4.2 4.2 4.2 4.2 5.0
数据包扩展 4.2 4.2 4.2 4.2 5.0
32 位 UUID
双模 LE 中心/外围设备
LE 外围设备模式
Google HCI 要求
LE 面向连接的通道