一 :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源码分析(六)-----蓝牙Bluetooth源码目录分析的更多相关文章

  1. [spring源码学习]六、IOC源码-BeanFactory和factory-bean

    一.代码实例 在我们分析spring的IOC源码的时候,发现除了配置标准的bean,并且通过getBean(beanName)的方法获取到一个bean的实例外,似乎还有这不少其他获取的方法,例如在第四 ...

  2. 框架源码系列六:Spring源码学习之Spring IOC源码学习

    Spring 源码学习过程: 一.搞明白IOC能做什么,是怎么做的  1. 搞明白IOC能做什么? IOC是用为用户创建.管理实例对象的.用户需要实例对象时只需要向IOC容器获取就行了,不用自己去创建 ...

  3. Android View体系(六)从源码解析Activity的构成

    前言 本来这篇是要讲View的工作流程的,View的工作流程主要指的measure.layout.draw这三大流程,在讲到这三大流程之前我们有必要要先了解下Activity的构成,所以就有了这篇文章 ...

  4. MTK Android 源码目录分析

    Android 源码目录分析 Android 4.0 |-- abi (application binary interface:应用二进制接口)|-- art (average retrieval ...

  5. Android Handler处理机制 ( 一 )(图+源码分析)——Handler,Message,Looper,MessageQueue

    android的消息处理机制(图+源码分析)——Looper,Handler,Message 作为一个大三的预备程序员,我学习android的一大乐趣是可以通过源码学习 google大牛们的设计思想. ...

  6. 手机自动化测试:Appium源码分析之跟踪代码分析六

    手机自动化测试:Appium源码分析之跟踪代码分析六   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest推出手机自 ...

  7. Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树

    Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树 目录 Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树 0x00 摘要 0x01 背景概念 1.1 词向量基础 ...

  8. 【转载】Android异步消息处理机制详解及源码分析

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  9. Android 全面插件化 RePlugin 流程与源码解析

    转自 Android 全面插件化 RePlugin 流程与源码解析 RePlugin,360开源的全面插件化框架,按照官网说的,其目的是“尽可能多的让模块变成插件”,并在很稳定的前提下,尽可能像开发普 ...

随机推荐

  1. fiddler---Fiddler工具栏功能介绍

    前几篇简单的介绍了Fiddler的功能,对于工具栏的操作只是简单了解,今天写一篇工具栏功能介绍和操作. 工具栏功能介绍 工具栏内容 工具栏依次是:会话保存,数据重放(Replay),转到(GO),数据 ...

  2. 【cf1111】C. Creative Snap (dfs+dp)

    传送门 简单的dfs+dp即可解决.根本不用动态开点 /* * Author: heyuhhh * Created Time: 2019/11/13 10:12:42 */ #include < ...

  3. c# 第25节 方法重载

    本节内容: 1:方法重载简介 2:方法重载的实现实例 1:方法重载简介 2:方法重载的实现实例 决定方法是否构成重载有三个条件: 1:在同一个类中 2:方法名相同 3:参数列表不同 实例例子: 实现:

  4. js字符串操作总结(必看篇)

    本文链接: https://www.jb51.net/article/97915.htm 字符方法 <!DOCTYPE html> <html lang="en" ...

  5. 剑指Offer-21.栈的压入、弹出序列(C++/Java)

    题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...

  6. 数论2&莫&杜

    积性函数: 积性函数定义ok 积性函数指对于所有互质的整数\(a\)和\(b\)有性质\(f(ab)=f(a)f(b)\)的数论函数 除数函数? 莫比乌斯函数\(\mu\)ok \[ \phi(i) ...

  7. vbs与其他语言进行交互编程(外存传参)

    vbs没有自定义排序函数.无需自己造轮子,可以用其他语言来完成这个任务(在传递数据比较简单的情况下,例如只传递数组). 首先用5分钟写一个C++排序的代码.命名为“mysort.cpp”: #incl ...

  8. 【2019.8.6 慈溪模拟赛 T3】集合(set)(线段树上DP)

    线段树上\(DP\) 首先发现,每个数肯定是向自己的前驱或后继连边的. 则我们开一棵权值线段树,其中每一个节点记录一个\(f_{0/1,0/1}\),表示在这个区间左.右端点是否连过边的情况下,使这个 ...

  9. MNIST-神经网络的经典实践

    MNIST手写体数字识别是神经网络的一个经典的入门案例,堪称深度学习界的”Hello Word任务”. 本博客基于python语言,在TensorFlow框架上对其进行了复现,并作了详细的注释,希望有 ...

  10. vue 使用localstorage实现面包屑

    mutation.js代码: changeRoute(state, val) { let routeList = state.routeList; let isFind = false; let fi ...