2026.2
蓝牙那些事,安卓蓝牙框架详解 开篇续接安卓平台蓝牙实现,从上到下层次结构清晰,对于初识安卓也可以将蓝牙架构作为示例研究。
《开篇》已经展示完整的蓝牙框架,从设置Settings UI,和SystemServer入手,展示蓝牙用户交互设计,后台服务,profiles的配置文件实现,以及profile状态机调度。

android的图形界面,设置的蓝牙用户交互尽可能的简单化,依次蓝牙开关,蓝牙名称,已配对设备,搜索列表等。



接下来认识一下主要的蓝牙Class类,对应application Framework层的接口方法列表:
com.android.server.BluetoothManagerService | |
android.bluetooth.IBluetoothManager | 暴露给客户端的AIDL接口。BluetoothAdapter 通过getBluetoothManagerApp获取此代理,管理蓝牙。 |
android.bluetooth.IBluetooth | BluetoothAdapter的很多方法调用到此接口。 |
android.bluetooth.IBluetoothGatt |
蓝牙服务service实现
.bluetooth.btservice.AdapterService | 蓝牙APP的核心服务,在蓝牙打开后启动。上层服务可以通过binder绑定调用到此服务,从而管理整个适配器。 |
.bluetooth.btservice.RemoteDevices | |
.bluetooth.pan.PanService | |
.bluetooth.map.BluetoothMapService | |
.bluetooth.pbap.BluetoothPbapService | |
.bluetooth.hfp.HeadsetService | |
.bluetooth.a2dp.A2dpService | |
.bluetooth.hid.HidHostService | |
.bluetooth.btservice.BondStateMachine | 管理绑定状态机:蓝牙设备的配对操作。包含justwork,noinputoutput设备等各种IO能力的设备,以及ssp简单配对和pin码配对方式。 |
.bluetooth.btservice.AdapterState | STATE_OFF、TURNING_ON、STATE_ON和TURNING_OFF的状态切换。 |
蓝牙接口层实现
android.bluetooth.BluetoothAdapter | |
android.bluetooth.BluetoothDevice | |
android.bluetooth.BluetoothSocket | |
android.bluetooth.BluetoothServerSocket | |
android.bluetooth.BluetoothGatt | |
android.bluetooth.BluetoothProfile | |
android.bluetooth.BluetoothHeadset | |
android.bluetooth.BluetoothA2dp | |
android.bluetooth.BluetoothHidHost | |
android.bluetooth.BluetoothMap | |
android.bluetooth.BluetoothPan |
每个profile配置文件:由接口interface层,服务Serivce和stateMachine状态机组成;以A2DP为例,状态机的切换过程如下,大写的CONNECT为事件,()括号中为状态;

A2DP的connect连接函数实现
//service中连接函数,给状态机发送事件,执行连接操作;public boolean connect(BluetoothDevice device) {......smConnect.sendMessage(A2dpStateMachine.CONNECT);//由statemachine状态机调用service服务的接口执行最终的命令操作;public boolean processMessage(Message message) {......if (mA2dpService.okToConnect(mDevice, true)) {//收到JNI层发送过来的A2DP事件,由service交给状态机处理void messageFromNative(A2dpStackEvent stackEvent) {sm.sendMessage(A2dpStateMachine.STACK_EVENT, stackEvent);
A2dpstatemachine的状态机代码
mDisconnected = new Disconnected();mConnecting = new Connecting();mDisconnecting = new Disconnecting();mConnected = new Connected();


addState(mOnState);addState(mBleOnState);addState(mOffState);addState(mTurningOnState);addState(mTurningOffState);addState(mTurningBleOnState);addState(mTurningBleOffState);
往期文章:
蓝牙那些事,蓝牙设备类型CoD和GATT外观,你的蓝牙长什么样
参考:
https://source.android.google.cn/docs/core/connect/bluetooth?hl=zh-cn
https://developer.android.google.cn/develop/connectivity/bluetooth?hl=zh-cn