版权声明:本文为博主原创文章,未经博主允许不得转载。
BT Application 构成
好在Android的开放性,以及它的代码清晰性(观其名,即可知其意),Application的框架能容易地被梳理出来。
这里以Android原生的Setting应用为切入点,一点点拆解
先来看看Setting的整体代码构成。
熟悉应用开发的同学,对以上apk骨架构成再熟悉不过了,当然了上面少了AS的gradle,对专搞系统的同学可以借助Android系统整体源码(环境)来编译该apk.
从Setting下面的AndroidManifest.xml可以看到bluetooth相关的activity = BluetoothSettingsActivity + bluetooth.DevicePickerActivity + bluetooth.BluetoothPairingDialog 等等。我们常用对Bluetooth的操作,都会有对应的Activity来辅助实现。
以上的每个Activity在Setting接下来的src下面,有专门的文件来管控实现,如下图
注意以下
- bluetooth设置相关代码是放在bluetooth目录下面
- 以及Android原生Setting代码路径(bluetooh上层目录下面有很多地其他(如wifi、datetime等等)设置管控实现代码。
bluetooth 下面的各个组件关系如下图
BluetoothSetting部分,主要完成蓝牙设置的整体view的布局(包括一些选项的条目)
BluetoothPairing主要为配对的事项,包含了相关的service、request、Activity、DialogFramgment等,关于配对详细flow,敬请关注后续文章更新;
BluetoothEnable主要负责管控bluetooth开关设置控制。
Android8.0 BT Enable Flow
有了上半部分的介绍,现在可以较为清晰的知道BT Enable的控制代码,接下来将从App层 —> Framework 层 —> Native(jni)层 —> btstack层 梳理bt enable 流程。
重点总结一下Android8.0之后,Google将btstack 管理部分分解到stack_manager的线程来管控,后续可以详细的看到btstack的每个组件部分,也由对应的线程来进行管控,这也是BlueDroid的一大优化改进。
其中具体的Enable Flow 见下面的UML图
参考链接
AndroidManifest.xml 解析
Android8.0 Settings Bluetooth
Android8.0 BlueDroid
Android8.0 bluetooth app