Android中bluetooth的架构

2024-04-16 07:32
文章标签 android 架构 bluetooth

本文主要是介绍Android中bluetooth的架构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 既然我们想要系统地进行分析一下Androidbluetooth,那么就有必要首先来从总体架构上看一下bluetoothAndroid中是处于哪些层次,做到手中有枪,心里不慌。Bluetooth从总体来看,基本的架构图如下:

 

这张图是我拷贝的网上的一份介绍bluetoothppt上,他应该也是出于某一份大牛之手,可惜的是我并没有能够找到具体的出处,若有人看到可以告诉我一下。

         从这张图可以看到,在最上层是一些Profile

l  GAPGeneral Access Profile:定义了Bluetooth建立基带链路的通用方法,以保证两个bluetooth设备能够相互通信。这一块在Android代码中并没有很明显的体现。

l  SDPService Discovery Profile):他用来发现对方Bluetooth所支持的Service。比如说,我连接一个耳机,那么这个耳机究竟是只能打电话,还是既能打电话又能听音乐,抑或是只能听音乐,这都是通过SDP来发现,所以,它贯穿于我们最开始的信息交互流程中。

l  Headset/Handsfree:这两个profile是用来实现打电话相关的内容的。

l  RFCOMM:这是一个基本的Profile,很多应用都是基于它上面实现的,比如说我们文件的传输(OPP Object Push Profile),当然上面说Headset/Handsfree,其实准确的说也是在RFCOMM层之上的。

         从个人的角度来看,位于最上层的还有几个APP

l  Settings App:用于构造设置中的UI。就是我们在手机打开设置时所看到的打开/关闭蓝牙的UI操作。

l  Phone App:这个是打电话时的UI,和蓝牙相关的就是声音出来的选项,可以选择蓝牙接听的菜单那一块的内容。

l  Bluetooth App:这一块在图中没有画出来,他并不直接体现在UI上,可以理解为一个后台运行的apk。包括了蓝牙文件发送(OPP)和电话薄传输(PBAP)两个部分。

         在中间Framework层,主要实现了各种API,这些API最终都是要通过jni层调入到下面来具体实现的。当然,他们还承担着接受底层消息的重任,这些消息也是要最终反馈到UI层的。

         jni层之下以及kernel层之上是bluez层(或者准确的说,其实bluez层是横跨jni层之下和kernel层的,如图中绿色框所示)。jni层和bluez的通信是通过dbus来实现的,至今为止我都没有能够理解dbus最终的实现原理,不过没关系,在后面我们和大家再一起到源码中去学习学习这一块。

         kernel层之下就是我们的bluetooth的芯片接口driver,这张图里面是使用的uart进行数据的传输的,后期我们也就以uart为主来详细进行分析。当然,还有别的接口,比如usb等等。

         这张图还有几个地方需要注意的:

一是最左边的btpower on/off。一般而言,这是在bluetooth打开/关闭的时候用于power的设置的。我看到的基本都是通过rfkill来进行power的加上和去除的。

         二是hciattach直接到tty设备的通路,这也是在bluetooth打开/关闭的时候对芯片进行一些各个厂家的初始化所需要的。

         大体上来说,这张图也就解释清楚了,希望各位能够从总体上对蓝牙的架构有个初步的了解,这对我们后面去看bluetooth的代码实现是很有好处的。当然,这里面还有很多对我们来说陌生的名词,没关系,现在陌生后期看多了估计我们就会明白了。

这篇关于Android中bluetooth的架构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/908159

相关文章

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk