当前位置:   article > 正文

Android蓝牙启动流程分析_bluetoothmanagerservice: bind trails excedded

bluetoothmanagerservice: bind trails excedded

本文基于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部分代码就完成了。
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/250951?site
推荐阅读
相关标签
  

闽ICP备14008679号