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中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干