android中蓝牙系统总述
来源:互联网 发布:英美留学对比 知乎 编辑:程序博客网 时间:2024/06/05 11:45
蓝牙(Bluetooth)提供移动设备及其配件之间低功耗、低成本的无线通信连接。蓝牙技术的核心,是根据蓝牙标准所实现的蓝牙协议栈。蓝牙能同时进行异步数据及同步语音传输,它的底层协议层包括众多协议,如逻辑链路控制和适配协议(L2CAP)、服务发现协议(SDP)、串口模拟协议(RFCOMM)等,一起为上层提供传输支持。而主要控制接口则由主机控制接口层(HCI)体现,它是蓝牙协议中软硬件之间的接口。在各种协议及HCI之上,是蓝牙的上层应用框架,框架里每个应用模式称之为一个Profile,供给外部不同的设备访问,如无线立体声耳机使用的A2DP(Advanced Audio Distribution Profile)以及打印机使用的无线打印机服务等,服务有数十种之多。 1.蓝牙基本架构 Android提供了对蓝牙的支持。蓝牙系统的内容包括: ·Linux内核的蓝牙驱动程序 ·Linux内核的蓝牙协议层 ·bluez(蓝牙在用户空间的库) ·bluez适配层 ·android.bluetooth包中的各个类(蓝牙在框架层的内容) ·蓝牙相关的应用程序 Android的蓝牙部分的结构如下: 2.蓝牙用户空间库bluez Android所采用的蓝牙用户空间库是bluez,它是Linux平台上一套完整的蓝牙协议栈开源实现。在Android中,bluez提供了很多分散的应用,包括守护进程和一些工具;bluez通过D-BUS IPC机制来提供应用层接口。需要注意的是,bluez的底层协议实现在kernel代码中,并不属于用户空间。 D-BUS是一套应用广泛的进程间通信机制,相对于Socket等底层IPC,它是更加复杂的IPC机制,支持更系统化的服务名、函数名等,同时也能对众多服务进程和客户端进行管理,调度通信消息的传递。D-BUS和Binder类似,但是应用范围更广泛。 bluez的主要体现结构如下: 3.bluez适配层 bluez在Android中的使用,需要经过Android的bluez适配层的封装来实现,bluez适配层源代码及头文件路径为:system/bluetooth/。该目录除了包含生成适配层库libbluedroid.so的源码之外,还包含bluez头文件、bluez配置文件等目录。由于bluez使用D-BUS作为与上层沟通的接口,因此适配层构造比较简单,封装了蓝牙的开关功能以及射频开关。 4.蓝牙的JNI和Java部分 蓝牙的JNI源代码文件为:frameworks/base/core/jni/android_bluetooth_*.cpp。蓝牙部分的JNI带有android_bluetooth_前缀,它们将提供android.bluetooth包中多个类的支持,这些内容会与其它模块JNI部分一起生成libandroid_runtime.so。 蓝牙的Java源代码路径为: ·frameworks/base/core/java/android/server:蓝牙的服务部分 · frameworks/base/core/java/android/bluetooth/:Android的蓝牙类 Android支持蓝牙设备的发现、配对、服务查找等基础功能,服务方面支持耳机(Headset)、免提(Handsfree)和立体声(A2DP)等部分。 ①核心组成 框架核心组成部分是android.bluetooth包中以IBluetoothDevice.aidl为接口的IBinder服务器端BluetoothDeviceService、客户端BluetoothDevice以及android.server包中的BluetoothEventLoop。 BluetoothDeviceService实现蓝牙功能的开启/关闭、设备的发现和配对、服务的发现和绑定等功能,android_server_BluetoothDeviceService.cpp对其提供JNI本地代码支持。 ·开关功能通过直接调用bluez适配层提供的开关功能来实现 ·服务发现和绑定等功能,均通过D-BUS调用bluez接口来实现。BluetoothDevice中其它的访问服务流程与此类似。 Android蓝牙Java部分和底层的关系如下: ②耳机及免提服务 对于服务实现部分的代码,主要是耳机和免提。两者都支持通话,区别在于免提可以支持一些操作按键,如拒接电话等,而耳机则不行。Android要支持这两个服务,则需要支持两种途径:一是通过SDP发布这两个服务,让配对的蓝牙设备可以发现这两个服务并主动进行连接;二是Android通过SDP判断设备是否支持连接到这两个服务,如果支持则主动去连接设备。连接方式都是通过RFCOMM协议完成的。最终的音频通道数据则由SCO协议传输。Android蓝牙的耳机及免提服务的结构如下: ③A2DP服务 A2DP服务对蓝牙立体声耳机提供支持,相比SCO,它能传输更好音质的音频数据。A2DP更多地用在音乐播放方面,而SCO则更多地用在电话语音等方面。A2DP结构如下: bluez对A2DP的支持很好,A2DP部分主要围绕IBluetoothA2DP来实现,Service部分通过D-BUS与bluez的Audio部分通信,主要的控制接口是Audio的sink组件,sink用来连接支持A2DP的Headset设备。如果Headset设备支持A2DP,Android可以自动完成SCO和A2DP的切换。
阅读全文
0 0
- android中蓝牙系统总述
- android系统中蓝牙初步
- android系统移植(一) 总述
- android系统移植(一) 总述
- android系统移植(一) 总述
- Cubietruck---23.android蓝牙分析1总
- Android蓝牙系统
- Android蓝牙系统
- Android蓝牙系统
- Android蓝牙系统
- Android中的蓝牙系统
- Android系统去除蓝牙
- Android系统 蓝牙模块
- Android系统中蓝牙设备间连接和通信
- Android系统架构总介
- Android中使用蓝牙
- Android中蓝牙介绍
- Android中蓝牙开发
- 【Spring】DispatcherServlet的启动和初始化
- MindManager,818点燃一夏
- [题解]bzoj3600 没有人的算数
- 未来世界的幸存者 -- 阮一峰
- 从零开发一个完整的Android项目(四)——合成JSON字符串
- android中蓝牙系统总述
- HDU2795(看似不是线段树的线段树)(一)
- Canvas&Paint[]Canvas:Matrix、Clip、Save&Restore
- asp.net apk文件不能直接下载的解决方法
- Gym
- 简单Python决策树可视化实例
- 体验一个全新的RTOS-QNX系统功能介绍
- 关于Java Web 使用Java的TimerTask, 触发定时器(执行某些任务)的实例
- Android Ordered Broadcast 有序广播