Android蓝牙启动流程分析

本文基于Android9.0源码,文中代码分布位于framework/base/services/core/java/com/android/server frameworks/base/core/java/android/bluetooth(平时我们调用的api代码就位于这里) package/app/bluetooth(系统中的蓝牙app,这里是最终实现蓝牙协议的地方) system/bt/binder/bluetooth(这里定义了整个蓝牙服务中使用到的AIDL)
启动蓝牙我们需要调用frameworks/base/core/java/android/bluetooth/BluetoothAdapter的enable方法,这里会去绑定一个系统服务framework/base/services/core/java/com/android/server/BluetoothService,这个服务持有的IBinder实现在framework/base/services/core/java/com/android/server/BluetoothManagerService类里面

接下来到BluetoothManagerService在这里插入图片描述
然后会调用
在这里插入图片描述
从上图我们看出,BluetoothManagerService实际是去bind了一个服务来操作蓝牙的,这个服务类位于package/app/bluetooth,类名AdapterService,我们接着分析AdapterService,上述代码最终会调用
在这里插入图片描述
这里引入了一个StateMachine状态机,这里不对状态机做进一步的分析,我们只需要知道这里最终使用的是AdapterState,我们在AdapterState搜索BLE_TURN_ON即可,其他状态的处理方式也是一样的。

在这里插入图片描述
接着代码会走到TurningBleOnState类中的
在这里插入图片描述
这里最终调用了AdapterService 的bringUpBle方法
在这里插入图片描述
然后启动了一个ProfileService的子类GattService,在ProfileService的onStartCommand中再次调用了AdapterService的
在这里插入图片描述
接着调用了
在这里插入图片描述
最后调用了一个native方法,在底层开启了蓝牙设备,至此蓝牙启动的Java部分代码就完成了。
在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值