android -- 蓝牙 bluetooth (一) 入门

分类: Android的原生应用分析 2013-05-19 21:44 19998人阅读 评论(42) 收藏 举报
bluetooth4.2.2源码android

目录(?)[+]

前段时间在 网上看了一些关于android蓝牙的文章,发现大部分是基于老版本(4.1以前含4.1)的源码,虽然无碍了解蓝牙的基本原理和工作流程,但对着4.2.2的代码看起来总是有些遗憾。所以针对4.2.2版本代码整理下相关知识,当然蓝牙工作的主干流程是没有变的,上电、加载驱动这些动作少不了的,只是这些功能的实现代码位置变了不少。希望本文可以让大家对android4.2的蓝牙部分代码有一个初步的了解。

        正文开始前,先明确代码版本:android  jellyBean 4.2.2,后续的蓝牙相关文章同样如此。

        另推荐个源码在线阅读网址 http://androidxref.com/,已经知道的童鞋无视这行吧。

入手一个新的模块或应用,当然首先要知道它都有什么了,与它相关的代码在那里,所以先一起看下蓝牙代码分布吧。

1. 代码分布:

packages/apps/Bluetooth/

看这路径肯定是蓝牙应用方面的代码了,主要是关于蓝牙应用协议的表现代码,包括opp、hfp、hdp、a2dp、pan等等,这些名词后面再解释。

frameworks/base/core/java/android/server/

4.2以后这个目录虽然还有了,但里面代码已经转移到应用层了,就是前面那个目录,所以4.2.2上的蓝牙这里可以忽略。

framework/base/core/java/android/bluetooth

这个目录里的代码更像一个桥梁,里面有供java层使用一些类,也有对应的aidl文件联系C、C++部分的代码,还是挺重要的。

kernel\drivers\bluetoothBluetooth

具体协议实现。包括hci,hid,rfcomm,sco,SDP等协议

kernel\net\bluetooth Linux kernel

对各种接口的Bluetoothdevice的驱动。例如:USB接口,串口等,上面kernel这两个目录有可能看不到的,但一定会有的。

external\bluetooth\bluedroid      BlueZ (应用空间协议),官方蓝牙协议栈。

system\bluetoothBluetooth        适配层代码,和framework那个作用类似,是串联framework与blueZ的工具。

大致代码分布就是这些,初步查看后让我们再来看下蓝牙的整体结构。

2.整体结构:

这部分直接上图了,看着直观些。图中把JNI部分虽然在目前4.2的代码中在packages层,这里还是画在Framework层了,说明下希望

不要引起理解的误会。从图上可以感觉到整体流程和以前变化不大,所以流程方面的文章看4.1或更早的应该问题也不大。

 PS:上图关于蓝牙协议栈的说明有误,4.2里已经不再是bluez了,在些更正一下,当然协议栈这一部分还是要有的,新的协议栈看下面英文:

Android 4.2 introduces a new Bluetooth stack optimized for use with Android devices. The new Bluetooth stack developed in

collaboration between Google and Broadcom replaces the stack based on BlueZ and provides improved compatibility and reliability.

google和broadcom合作开发了一个新蓝牙协议栈,老版本的兼容性问题在所难免了。在此感谢网友andger032的提醒。

3.常用类和名词解释:

\packages\apps\Settings\src\com\android\settings\bluetooth 目录下

BluetoothEnabler.java   界面上蓝牙开启、关闭的开关就是它了,

BluetoothSettings.java  主界面,用于管理配对和连接设备

LocalBluetoothManager.java  提供了蓝牙API上的简单调用接口,这里只是开始。

CachedBluetoothDevice.java   描述蓝牙设备的类,对BluetoothDevice的再封装

BluetoothPairingDialog.java  那个配对提示的对话框

/packages/apps/Phone/src/com/android/phone/

BluetoothPhoneService.java  在phone的目录肯定和电话相关了,蓝牙接听挂断电话会用到这个

/packages/apps/Bluetooth/src/com/android/bluetooth/btservice/

AdapterService.java    4.2后才有的代码,蓝牙打开、关闭、扫描、配对都会走到这里,其实更准确的说它替代了4.1之前的BluetoothService.java,原来的工作就由这个类来完成了。说到这里不能不说4.2蓝牙的目录变了,在4.1及以前的代码中packages层的代码只有opp协议相关应用的代码,也就是文件传输那部分,而4.2的代码应用层的代码则丰富了许多,按具体的蓝牙应用协议来区别,分为以下文件夹(这里一并对蓝牙一些名词作个简单解释):

a2dp    蓝牙立体声,和蓝牙耳机听歌有关那些,另还有个avrcp--音频/视频远程控制配置文件,是用来听歌时暂停,上下歌曲选择的。
       btservice  这个前面AdapterService.java的描述大家应该能猜到一些,关于蓝牙基本操作的目录,一切由此开始。
       hdp      蓝牙关于医疗方面的应用 Bluetooth Health Device Profile
       hfp       和电话相关,蓝牙接听、挂断电话  Hands-free Profile
       hid      人机交互接口,蓝牙鼠标键盘什么的就是这个了
      opp     不多解释,以前就有。
      pan      描述了两个或更多个 Bluetooth 设备如何构成一个即时网络,和网络有关的还有串行端口功能(SPP),拨号网络功能(DUN)

pbap    电话号码簿访问协议(Phonebook Access Profile)

android 4.2的蓝牙应用层部分代码更丰富了,虽然有些目录还没具体代码,不过说不准哪个版本更新就有了,就像4.0添加了hdp医疗那部分一样。

另外原本在framework的JNI代码也被移到packages/apps/bluetooth当中。

/frameworks/base/core/java/android/bluetooth/目录下

BluetoothA2dp.java A2DP的功能实现
     BluetoothAdapter.java 蓝牙action的定义,虚拟设备属性以及操作方法
     BluetoothAudioGateway.java 蓝牙语音网关
     BluetoothClass.java 蓝牙设备类型的定义
     BluetoothDevice.java 蓝牙设备属性
     BluetoothDevicePicker.java 定义远程蓝牙设备的特性,比如需要认证,设备类型
     BluetoothHeadset.java 定义蓝牙headset功能的属性以及接口
     BluetoothInputStream.java 蓝牙流接口的实现(输入流)
    BluetoothOutputStream.java 蓝牙流接口的实现(输出流)
    BluetoothServerSocket.java 蓝牙socket服务端具备的方法
    BluetoothSocket.java 蓝牙socket的封装
    BluetoothUuid.java 蓝牙uuid的定义以及uuid的解析

以上java文件在使用具体功能会用到,现在只是简单描述下,至于具体使用在后续文章用到时再给出。同时代码说明部分也就写这些了

对于C、C++部分的代码一方面没看那么多,另一方面根据android JNI的命名习惯,大家找起来也很容易。

4.后续分析:

前面从整体上描述蓝牙的基本知识,落实在具体的代码分析上,我们按几个主线功能来走,蓝牙的开关、搜索配对、蓝牙耳机与电话和文件传输,

这几个也算是蓝牙的常用必备功能了,所以在后续文章中将按着这个顺序来跟一下它们代码调用流程。希望可以让你快速的了解蓝牙,当然如果有失误

写错的地方,欢迎反馈,谢谢。

------------------------修改记录------------------

android -- 蓝牙 bluetooth (一) 入门

android -- 蓝牙 bluetooth (二) 打开蓝牙
android -- 蓝牙 bluetooth (三)搜索蓝牙
android -- 蓝牙 bluetooth (四)OPP文件传输

android -- 蓝牙 bluetooth (五)接电话与听音乐

android -- 蓝牙 bluetooth (一) 入门相关推荐

  1. android -- 蓝牙 bluetooth (四)OPP文件传输

    原址 在前面android -- 蓝牙 bluetooth (一) 入门文章结尾中提到了会按四个方面来写这系列的文章,前面已写了蓝牙打开和蓝牙搜索,这次一起来看下蓝牙文件分享的流程,也就是蓝牙应用op ...

  2. ZT android -- 蓝牙 bluetooth (四)OPP文件传输

    android -- 蓝牙 bluetooth (四)OPP文件传输 分类: Android的原生应用分析 2013-06-22 21:51 2599人阅读 评论(19) 收藏 举报 4.2源码AND ...

  3. 深入了解Android蓝牙Bluetooth——《基础篇》

    深入了解Android蓝牙Bluetooth--<基础篇> 什么是蓝牙?   也可以说是蓝牙技术.所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,是由爱立信公司公司发明的 ...

  4. android -- 蓝牙 bluetooth解读

    入手一个新的模块或应用,当然首先要知道它都有什么了,与它相关的代码在那里,所以先一起看下蓝牙代码分布吧. 1. 代码分布: packages/apps/Bluetooth/ 看这路径肯定是蓝牙应用方面 ...

  5. android 蓝牙 bluetooth OPP文件传输

    蓝牙文件分享的流程,也就是蓝牙应用opp目录下的代码,作为蓝牙最基本的一个功能,这部分的代码在之前的版本中就已经有了,新旧版本代码对比很多类名都是一样的,这一部分新东西不多,写在这里帮助大家梳理下流程 ...

  6. 深入了解Android蓝牙Bluetooth【基础+进阶】

    基础篇 什么是蓝牙? 也可以说是蓝牙技术.所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,是由爱立信公司公司发明的.利用"蓝牙"技术,能够有效地简化掌上电脑.笔记 ...

  7. android -- 蓝牙 bluetooth (二) 打开蓝牙

    4.2的蓝牙打开流程这一部分还是有些变化的,从界面上看蓝牙开关就是设置settings里那个switch开关,widget开关当然也可以,起点不同而已,后续的流程是一样的.先来看systemServe ...

  8. Android 蓝牙 Bluetooth 自动回连 取消pin码校验弹出框

    蓝牙深层次的也不太懂,主要是使用了 BluetoothAdapter 和 BluetoothDevice 这两类,一个表示本地蓝牙设备,一个表示远程蓝牙设备 相关说明:https://blog.csd ...

  9. Bluetooth--- android -- 蓝牙 bluetooth

    android -- 蓝牙 bluetooth (一) 入门 分类: Android的原生应用分析 2013-05-19 21:44 6229人阅读 评论(37) 收藏 举报 bluetooth 4. ...

最新文章

  1. Java---replace与replaceAll的区别
  2. js移除某个样式_js中如何移除css样式?
  3. Flash务实主义(五)——AS3的垃圾回收(转)
  4. Linux中Cache内存占用过高解决办法
  5. 如何找到Fiori Launchpad tile所属的catalog id
  6. ug编程内公差和外公差是什么_干货丨模具工厂CNC加工编程工艺与标准!
  7. 嵌入式linux的运行过程,ARM嵌入式设备Linux系统启动步骤和方式
  8. 牛客网【每日一题】4月28日题目精讲 美味菜肴
  9. 关于cp命令中拷贝所有的写法
  10. 远程登录的几种方式对比
  11. Prometheus-普罗米修斯:高扩展性的监控和报警系统
  12. Delphi XE7 下载 安装序列号 破解
  13. 最新二开版漫画小说听书三合一完整源码/整合免签接口/搭建教程/带采集接口
  14. Linux视频教程—笔记(全)
  15. 韩顺平 2021零基础学Java 学习笔记(3)(自用)
  16. 分享一个网盘:千脑网
  17. 用计算机弹清明上河图谱,[TIF超清] 《清明上河图》北宋 张择端 单幅画1.85GB全卷扫描...
  18. php对url转码,如何使用php url中文转码
  19. 世界各国大脑计划现状综述,互联网大脑计划系列二
  20. c语言编程入门教程+网易,人话讲编程·C语言入门:第一讲,Hello World

热门文章

  1. 《斗罗大陆H5》月刃武魂指导和魂环搭配
  2. Unity5混音器DSP插件编写教程【一】
  3. lms全称是什么意思_lms是什么意思?
  4. linux进程创建心得体会,Linux系统下计算机C语言编程心得体会
  5. 2018-2-13-win10-uwp-smms图床
  6. FL Studio 20音乐制作教程
  7. 微信小程序入门---01
  8. latex 表格如何精细控制行高,行距,行与行之间的距离
  9. 蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别...
  10. TSP问题解析篇之自适应大邻域搜索(ALNS)算法深度通读(附python代码)