蓝牙应用通过 Binder 与蓝牙进程进行通信。蓝牙进程使用 JNI 与蓝牙堆栈通信,并向开发者提供对各种蓝牙配置文件的访问权限。AOSP 中提供了默认蓝牙堆栈(位于 packages/modules/Bluetooth/system 中)。该堆栈会实现常规蓝牙 HAL,并通过扩展和更改配置对其进行自定义。
蓝牙协议
Android蓝牙协议是指Android操作系统中用于蓝牙通信的协议栈。Android支持多种蓝牙协议,包括经典蓝牙(Classic Bluetooth)和低功耗蓝牙(Bluetooth Low Energy,简称BLE)。
对于经典蓝牙,Android使用了一系列的协议和规范,如RFCOMM(串口通信协议)、L2CAP(逻辑链路控制和适配层协议)、SDP(服务发现协议)等。这些协议组成了经典蓝牙协议栈,使得Android设备能够与其他经典蓝牙设备进行数据传输和通信
Android支持多种蓝牙协议,包括:
1.Bluetooth Classic: 传统蓝牙协议,用于点对点连接;
- Bluetooth Low Energy(BLE):低功耗蓝牙协议,用于l0T设备、健康监测设备等的连接;
3.Bluetooth Mesh:蓝牙网状网络协议,用于连接多个设备形成一个网状网络;
4.Bluetooth GATT(通用属性配置文件): 用于BLE设备之间的通信,支持数据传输和配置服务;
5.SPP(串行端口协议): 用于传输串行数据,类似于传统串口通信;
6.HID(人体接口设备): 用于连接鼠标、键盘等人体接口设备;
7.HFP(蓝牙耳机协议): 用于连接蓝牙耳机、车载蓝牙等设备。
蓝牙配置文件有:
- A2DP(高级音频分发配置文件,类似蓝牙音箱)
- HFP 音频网关(免提模式配置文件,用于电话操作)
- PBAP(电话簿访问配置文件,联系人及通话记录访问相关)
- HID(人机接口设备配置文件,蓝牙手柄、鼠标、键盘等)
- SAP (SIM 卡访问配置文件)
- MAP (用于短信的消息访问配置文件)
- OPP (对象推送配置文件)
- OBEX over L2CAP (通过逻辑链路控制和适配协议进行对象交换 )
- HSP (耳机配置文件)
- AVRCP (音频/视频远程控制配置文件)
- PBAP (电话簿访问配置文件)
- HDP (健康设备配置文件)
- SPP (串行端口配置文件)
- PAN/BNEP (个人区域网络配置文件/蓝牙网络封装协议)
- DIP (设备 ID配置文件)
- HOGP 1.0 (HID over GATT)
- HD音频 请参阅的“高级音频编解码器”
HIDL
供应商设备使用硬件接口设计语言 (HIDL) 与蓝牙堆栈交互。
HAL
硬件抽象层定义了 android.bluetooth API 和蓝牙进程会调用的标准接口,并且您必须实现该接口才能使蓝牙硬件正常工作。
蓝牙 HAL 位于 /hardware/libhardware/include/hardware/bluetooth.h 中。bluetooth.h 文件包含蓝牙堆栈的基本接口,而且您必须实现其功能。
特定于配置文件的文件位于同一目录下。如需了解详情,请参阅HAL文件参考。
音频
利用蓝牙连接,用户可在启用了蓝牙的设备上流式传输音频。
蓝牙堆栈允许音频源设置绝对音量,以便用户准确控制音频音量。音频源设备会将音量信息和未衰减的音频发送到接收器。然后,接收器会根据音量信息放大音频,以便用户听到准确的播放音量。
音频源设备还可以注册接收音量通知。进行此项注册后,当用户使用接收器上的控件更改音量时,接收器便会向音频源发送通知。这样一来,音频源便能够准确地在界面上显示音量信息。
高级音频编解码器
在 Android 8.0 中,使用高级音频分发配置文件 (A2DP) 的设备可以支持额外的音频编解码器。当设备连接到远程音频接收器时,蓝牙堆栈支持音频编解码器协商。该协商旨在选择发送器和接收器都支持的最佳编解码器,以提供高质量的音频。选择后,所有音频都会先路由选定的编码器,然后再发送到接收器。
设备制造商可能需要针对某些专有音频编解码器获得单独的许可和二进制 blob。除了 SBC,Android 8.0 还支持以下编解码器:
- AAC
- aptX
- aptX
- HD
- LDAC