android 蓝牙 怎么入门

 我来答
huanglenzhi
推荐于2016-03-28 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517191
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部

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


  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_rookie
2015-01-26 · 超过65用户采纳过TA的回答
知道小有建树答主
回答量:127
采纳率:0%
帮助的人:99.4万
展开全部
传统蓝牙 还是 低功耗蓝牙?建议从官方文档API Guides入手
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式