Android源码分析(六)-----蓝牙Bluetooth源码目录分析
一 :bluetooth 的设置应用
packages\apps\settings\src\com\android\settings\bluetooth*
蓝牙设置应用及设置参数,蓝牙状态,蓝牙设备等。
bluetoothdevicepreference.java
顾名思义,蓝牙设备首选项,也就是蓝牙设备的配置信息,比如是否连接,是否配对,是否可见等等。该类继承了preference类,主要是提供获取蓝牙设备及通知蓝牙设备配置信息变化。
bluetoothdiscoverableenabler.java
蓝牙搜索ui逻辑处理,包括搜索暂停,搜索恢复,及蓝牙开启关闭时的蓝牙搜索处理,以及搜索超时等处理。该类同时使用了broadcast与handle机制,用来处理搜索的状态变化。
bluetoothenabler.java
蓝牙功能的开启/关闭功能处理。
bluetootheventredirector.java
蓝牙事件转发处理。通过使用broadcast机制,在onstart里面注册了蓝牙的事件权限。
bluetoothnamepreference.java
监听蓝牙名字的变化
bluetoothpairingdialog.java
是activity,配对时各种提示框及按键事件处理,如用户请求配对,密码输入,密码确认,同意等提示框。
bluetoothpairingrequest.java
配对的数据处理,为bluetoothpairingdialog.java提供数据支持,同时启动bluetoothpairingdialog.java activity当蓝牙应用在前台并且屏幕是亮的,否则通知系统需要弹出提示框(比如蓝牙后台提示,通过notification通知提示)。
bluetoothpermissionactivity.java
允许连接的提示框处理
bluetoothpermissionrequest.java
为bluetoothpermissionactivity.java提供数据支持,若蓝牙在前台并且屏幕是亮的,则启动bluetoothpermissionactivity.java activity,否则使用notification来提示通知。
requestpermissionactivity.java
询问用户是否开启蓝牙及蓝牙搜索,当前蓝牙状态如果是未开启状态,则开启蓝牙及蓝牙搜索;当前蓝牙如果是开启状态,则不处理;当只针对是否开启蓝牙时,则开启蓝牙并不开启蓝牙搜索。
requestpermissionhelperactivity.java
询问用户是否开启蓝牙及蓝牙搜索,一般由requestpermissionactivity.java启动。
settingsbtstatus.java
蓝牙各种状态的资源显示
bluetoothsettings.java
蓝牙设置应用,蓝牙状态变化及设备绑定信息处理等。各个菜单处理主要是通过cachedbluetoothdevice.java来实现。主要有添加蓝牙设备,删除蓝牙设备,点击获取蓝牙设备信息,及创建具体蓝牙设备的菜单等。
connectspecificprofilesactivity.java
蓝牙设备耳机、a2dp、sap相关的设置处理
dockservice.java
蓝牙dock相关服务,配置信息的修改,连接的修改等。
dockeventreceiver.java
接收各种dock事件,并启动dockservice服务。并提供一个结束服务方法。
cachedbluetoothdevice.java
提供蓝牙设备的各种属性信息以及提供蓝牙设备连接,配对等方法。
cachedbluetoothdevicemanager.java
管理蓝牙设备,包括增加、删除蓝牙设备及通知
localbluetoothmanager.java
提供了一系列蓝牙方法,如开始扫描、结束扫描逻辑处理。
二 : bluetooth 的服务应用
packages\apps\bluetooth\src\com\android\bluetooth*
蓝牙ftp,opp,sap,bpp等实现。蓝牙传输及配对等实现。
三 : bluetooth 免提、耳机及a2dp应用
packages\apps\phone\src\com\android\phone\bluetooth.
主要是bluetooth在其他应用如通话,电话本还有耳机相关的应用。
四 : bluetooth 的java类
frameworks\base\core\java\android\bluetooth*
如bluetoothclass,bluetoothadapter,bluetoothdevice等。bluetooth应用就是通过这些类实现。
五 : bluetooth 的jni接口
frameworks\base\core\jni\android_bluetooth_.
主要是为bluetooth的java类提供一些底层api支持(c++实现)。如headset,socket等。
六 : bluetooth的协议栈支持(bluez)
external\bluetooth*
提供蓝牙协议栈支持,android主要是用bluez协议栈。
七 : bluetooth的设备管理库
system\bluetooth*
应该是属于kernel层(linux核心代码)了,具体还需要了解?
八 : bluetooth的kernel层
kernel\drivers\bluetooth*
kernel\net\bluetooth*
linux系统上bluetooth的核心代码,包括驱动?
通话应用相关源码分析
bluetoothatphonebook.java
通过at命令帮助管理电话本显示
bluetoothcmeerror.java
扩充的at命令错误编码
bluetoothhandsfree.java
通话中蓝牙耳机,蓝牙免提的管理
bluetoothheadsetservice.java
提供蓝牙耳机,蓝牙免提profile
opp
bluetoothopplauncheractivity.java
其他应用启动蓝牙的入口。比如通过蓝牙发送功能。发送功能分为发送文件/多个文件/内容三种模式。发送内容的时候,会新建一个临时文件夹来保存发送的内容。发送文件的路径都会保存到数据库中。当蓝牙未启动,则启动bluetoothoppbtenableactivity.java激活蓝牙,否则启动bluetoothoppreceiver.java处理。
bluetoothoppbatch.java
存储并提供一些方法,关于opp服务共享的传输信息。
bluetoothoppbtenableactivity.java
询问是否开启蓝牙提示框
bluetoothoppbtenablingactivity.java
蓝牙开启进度条处理,包括正常结束和按键取消结束。
bluetoothoppbterroractivity.java
异常提示框,标题及内容由启动该activity提供。
bluetoothoppincomingfileconfirmactivity.java
询问用户是否接收对方发过来的文件
bluetoothoppl2caplistener.java
创建l2cap连接监听线程
bluetoothopplivefolder.java
创建live文件夹
bluetoothoppmanager.java
蓝牙服务层opp接口。管理蓝牙发送的一些共享数据
bluetoothoppnotification.java
蓝牙发送/接收的提示框处理,如用户确认发送接收,发送接收完成等。
bluetoothopppreference.java
蓝牙设备名字及obex的配置信息
bluetoothoppprovider.java
针对shares shares_id live_folder_received_files 三种情况对db进行插入,更新,删除等操作。
bluetoothoppreceivefileinfo.java
存储蓝牙接收文件的信息。生成一个唯一的文件名称,避免冲突覆盖。同时在生成文件前做了一些空间是否足够,是否存在外接存储器等判断。
bluetoothoppreceiver.java
接收一些opp的广播消息
bluetoothopprfcommlistener.java
创建rfcomm连接监听
bluetoothoppsendfileinfo.java
存储发送的文件信息
喜欢源码分析系列可参考其他文章:
android源码分析(一)-----如何快速掌握android编译文件
android源码分析(二)-----如何编译修改后的framework资源文件
android源码分析(三)-----系统框架设计思想
android源码分析(四)-----android源码编译及刷机步骤
android源码分析(五)-----如何从架构师的角度去设计framework框架
推荐阅读
-
Android 2.3 拨号上网流程从源码角度进行分析
-
深入解析vue 源码目录及构建过程分析
-
android的消息处理机制(图文+源码分析)—Looper/Handler/Message
-
Android 自定义相机及分析源码
-
SpringBoot 源码解析 (六)----- Spring Boot的核心能力 - 内置Servlet容器源码分析(Tomcat)
-
Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)
-
Android开发关于Toast的源码分析
-
Android8.1 SystemUI源码分析之 电池时钟刷新
-
Tomcat源码分析 (六)----- Tomcat 启动过程(一)
-
Android10.0-多用户切换流程源码分析