【Android】【Bluetooth Stack】Android Bluetooth架构分析(超详细)

这篇具有很好参考价值的文章主要介绍了【Android】【Bluetooth Stack】Android Bluetooth架构分析(超详细)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 精讲蓝牙协议栈(Bluetooth Stack):SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论

2. 欢迎大家关注和订阅,【蓝牙协议栈】和【Android Bluetooth Stack】专栏会持续更新中.....敬请期待!

目录

1. Android Bluetooth发展历程简介

2. Android Bluetooth架构

2.1 Android Bluetooth架构图

2.2 BT Framework

2.2.1 BT 类图

2.2.3 Profile Service 映射关系

2.3 SettingsLib

2.3.1 SettingsLib常见的类


1. Android Bluetooth发展历程简介

  • Android1.5 中增加了蓝牙功能,立体声 Bluetooth 支持:A2DP [Advanced Audio Distribution Profile]、AVCRP [Audio/Video Remote Control Profile],自动配对。
  • Android2.0 中支持Bluetooth2.1协议。
  • Android3.0 中能让应用查询已经连接上 Bluetooth 设备的 Bluetooth Profile、音频状态等,然后通知用户。
  • Android3.1 中系统可以通过 Bluetooth HID 方式同时接入一到多款输入设备。
  • Android4.0 中新增支持连接 Bluetooth HDP [Health Device Profile)] 设备,通过第三方应用的支持,用户可以连接到医院、健身中心或者家庭等场合中的无线医疗设备和传感器。
  • Android4.2 中引入了一种新的针对 Android 设备优化的 Bluetooth 协议栈 BlueDroid,从而取代 BlueZ 协议栈。Bluedroid 协议栈由 Google 和 Broadcom 公司共同开发,相对于 BlueZ 协议栈,BlueDroid 提升了兼容性和可靠性。
  • Android4.3 中增加了对低功耗蓝牙的支持,内置支持 Bluetooth AVRCP 1.3,基于 Google 和 Broadcom 公司功能研发的针对于 Android 设备优化的新的蓝牙协议栈 BlueDroid。
  • Android4.4 中新增两种新 Proifle 支持:HID [Human Interface Device]、MAP [Message Access Profile]
  • Android5.0 中支持Bluetooth4.1协议。
  • Android6.0 中扫描蓝牙需要动态获取定位才行。
  • Android7.0 中支持Bluetooth4.2协议。
  • Android8.0 中支持Bluetooth5.0协议,强化了蓝牙音频的表现。比如编码/传输格式可选SBC、AAC、aptX/aptX HD、LDAC等四种,音质依次提高。
  • Android10.0 中支持Bluetooth5.1协议,在5.0的基础上,增加了侧向功能和厘米级定位服务,大幅度提高了定位精度。使室内定位更精准。
  • Android11.0 中支持Bluetooth5.2协议,增强版ATT协议,LE功耗控制和信号同步,连接更快,更稳定,抗干扰性更好。
  • Android12.0 中支持Bluetooth5.3协议,增强了经典蓝牙BR/EDR(基础速率和增强速率)的安全性。蓝牙5.3的延迟更低、抗干扰性更强、提升了电池续航时间。系统引入了新的运行时权限 BLUETOOTH_SCAN、BLUETOOTH_ADVERTISE 和 BLUETOOTH_CONNECT权限,用于更好地管理应用于附近蓝牙设备的连接。
  • Android13.0 中引入LE Audio支持,LE Audio 是蓝牙技术联盟(SIG Q) 在 2020 年国际消费电子展上推出的新一代蓝牙低功耗音频技术,能以蓝牙低功耗状态下传递音频有利于提升蓝牙耳机续航力和性能,同时也导入新世代蓝牙音频编码 LC3(Low Complexity Communication Codec),以及多种音频分享、广播音频模式等,并且有利于助听器产品,能够达到低延迟、高音质等功能。
    蓝牙低功耗音频LE Audio 算是蓝牙技术联盟发展 20 年全新的音频技术,中间历经8年发展与两次核心规格更新,也算是有史以来最大型开发项目,能够分许开发者通过23种不同文件配置与服务规范,开发出蓝牙高音质、新拓朴结构和省电音频装置。
  • 目前最新的蓝牙协议是蓝牙5.3版本(截止到2023年9月22日)
  • Android 4.3 开始,开始支持BLE功能,但只支持Central(中心角色or主机)
  • Android 5.0开始,开始支持Peripheral(外设角色or从机)

中心模式和外设模式是什么意思?

  • Central Mode: Android端作为中心设备,连接其他外围设备。
  • Peripheral Mode:Android端作为外围设备,被其他中心设备连接。在Android 5.0支持外设模式之后,才算实现了两台Android手机通过BLE进行相互通信。

2. Android Bluetooth架构

2.1 Android Bluetooth架构图

android bluetooth stack,蓝牙基础知识,网络通信协议,蓝牙协议栈,Bluetooth Stack,Android,BT Framework

其实可以大致的分为4层:Application、Framework、Service和Driver层;

Application

Android蓝牙应用程序,我们常见的有Settings、BT Phone、BT Music等一些应用,使用了BT API实现;

Framework

提供给应用使用的API,我们平时使用的BluetoothAdapter、BluetoothDevice、BluetoothSocket等,通过使用BluetootoAdapter调用BT提供的API来开启BT,然后通过回调的方式获取到对应的RemoteDevice,即BluetoothDevice,然后通过具体的Device设备来进行连接和数据的传递;

Service

这一块的逻辑主要在package/apps/Bluetooth模块中使用,其中包含很多Service,提供所有的上层服务以及与Bluedroid底层进行交互。

其中BluetootAdapter主要提供蓝牙的基本操作,比如enable, disable, discovery, pair, unpair, createRfcomm等,对应了AdapterService,其余的就都是Profile对应的各自的Service;

Bluedroid

蓝牙协议层,提供所有蓝牙的实际操作,开关蓝牙、搜索管理、链路管理以及各种profile的实现;

整个系统的架构比较明确,基本上所有实际性的操作都是包含在Bluedroid中的,而Bluedroid之上的逻辑,主要适用于控制流程的调用以及状态信息的响应;

在Bluetooth中使用了状态机来控制流程调度,在指定的状态下执行相应的操作,将指令传递给底层之后,底层通过回调的方式将Bluetooth state callback给上层;

2.2 BT Framework

android bluetooth stack,蓝牙基础知识,网络通信协议,蓝牙协议栈,Bluetooth Stack,Android,BT Framework

BT Framework层的作用只是用于连接Bluetooth Service,为其他应用提供使用蓝牙的接口,起到承上启下的作用,没有太多的实质性操作的逻辑;

Framework中主要涉及到了两个概念:状态机和回调,基本上整个BT Framework层也是依托上述的两个概念支撑着整个流程调度的控制;

每一个ProfileService基本上都会对应一个状态机用于控制该service的调度逻辑;

2.2.1 BT 类图

android bluetooth stack,蓝牙基础知识,网络通信协议,蓝牙协议栈,Bluetooth Stack,Android,BT Framework

  • BluetoothService:
  • BluetoothManager:Framework api,提供给应用层去调用相应的接口;
  • IBluetoothManagerCallback:
  • IBluetoothStateChangeCallback:BT状态变化的监听;
  • BluetoothHandler:
  • BluetoothManagerService:主要是framework层实现蓝牙功能的地方,我们从BluetoothAdapter调用的方法都会调用到BluetoothManagerService里,而BluetoothManagerService里的大部分实现又是通过绑定Bluetooth apk,即AdapterService来实现的。这样BluetoothManagerService既起到了统一framework蓝牙实现的地方,又让Bluetooth apk可以有丰富的profile具体功能实现;
  • BluetoothAdapter:本地蓝牙适配器,是所有蓝牙交互的入口点,表示蓝牙设备自身的一个蓝牙设备适配器,整个系统只有一个蓝牙适配器。
  • IBluetoothCallback:BT监听回调;
  • AdapterServiceBinder:AdapterService的代理,面向Frameworks API,即面向BluetoothAdapter的使用;
  • AdapterService:Service的子类,负责BT整个流程调度的中间服务,负责和JNI层进行交互,提供了控制蓝牙状态的调用逻辑;
  • BluetoothDevice:表示远程的蓝牙设备,利用他可以通过BluetoothSocket请求与某个远程设备连接连接,或查询有关该设备的信息,例如设备的名称、地址、类和绑定状态
  • BluetoothProfile:表示蓝牙配置文件的接口。蓝牙配置文件是适用于设备间蓝牙通信的无线接口规范。
  • BluetoothHeadset:提供蓝牙耳机支持,以便与手机配合使用,其中包括蓝牙耳机和免提配置文件
  • BluetoothProfile.ServiceListener:在BluetoothProfile IPC客户端连接到服务(即运行特定配置文件的内部服务)或断开服务连接时向其发送通知的接口

2.2.3 Profile Service 映射关系

Profile Service Protocol Decs
BluetoothHeadset HeadsetService 耳机(远程控制端设备) 提供手机与耳机之间通话所需的基本功能,实现了最基本的通话操作:接听、挂断、调节音量、音源输出切换
BluetoothA2dp A2dpService 音频数据流源 用于定义音频流的输入端
BluetoothA2dpSink A2dpSinkService 音频数据流接收端 定义音频流的输出端
BluetoothHidHost HidHostService 人机接口 我们常见的设备有蓝牙鼠标、键盘
BluetoothHealth HealthService 健康
BluetoothPan PanService 个人局域网 定义两个或以上的蓝牙设备如何形成AD-HOC网络及如何通过网络接入点使用该机制访问远程网络
BluetoothGattServer GattService 通用属性 定义了属性类型并规定了如何使用,包括了一个数据传输和存储的框架和一些基本操作
BluetoothMap BluetoothMapService 信息访问 定义了设备之间交换信息的特征和程序(服务端)
BluetoothHeadsetClient HeadsetClientService 耳机(远程控制端设备) 客户端
AvrcpTargetService 被控制目标设备(音频/视频远程控制]) 接收命令并按命令响应的设备,如播放/录音设备,电视,手机等
BluetoothAvrcpController AvrcpControllerService 远程控制端设备(音频/视频远程控制]) 通过发送命令帧到目标发起传输,如车载系统,蓝牙耳机,蓝牙音响
BluetoothSap SapService SIM访问 定义了通过蓝牙链路访问GSM、SIM卡、UICC卡或R-UIM卡所使用的的协议和程序
BluetoothPbapClient PbapClientService 电话簿访问 定义推送客户端角色
BluetoothMapClient MapClientService 信息访问 定义了设备之间交换信息的特征和程序(客户端)
BluetoothHidDevice HidDeviceService 人机接口 我们常见的设备有蓝牙鼠标、键盘
BluetoothOppService 文件传输 面向对象传输协议,用于传输文件
BluetoothPbap BluetoothPbapService 电话簿访问 定义推送服务器角色
BluetoothHearingAid HearingAidService 助听器

上述提及到的Profile都是在frameworks中实现了BluetoothProfile接口类,Service都是继承了ProfileService;

  • BluetoothA2dp:定义高质量音频如何通过蓝牙连接和流式传输,从一台设备传输到另一台设备,“A2DP”代表高级音频分发配置文件,是BluetoothProfile的实现类
  • BluetoothHealth:表示用于控制蓝牙服务的健康设备配置文件代理。BluetoothProfile的实现类
  • BluetoothGatt:与低功耗蓝牙通信有关的配置文件代理

ProfileService

android bluetooth stack,蓝牙基础知识,网络通信协议,蓝牙协议栈,Bluetooth Stack,Android,BT Framework

BluetoothProfile

android bluetooth stack,蓝牙基础知识,网络通信协议,蓝牙协议栈,Bluetooth Stack,Android,BT Framework

而ProfileService又继承了Service,所以这个Services都是通过startService的方式启动的;

调用关系为BluetoothProfile调用ProfileService中的Binder,Binder就是通过aidl实现的,Binder调用ProfileService,ProfileService调用BT的JNI层;

2.3 SettingsLib

settingsLib是封装了BT提供的一些API的接口,基本上就是操作BluetootAdapter,更加方便Settings模块的调用和管理;

settingslib只有在用于系统级权限的应用中才可以使用,普通三方应用无法使用;

2.3.1 SettingsLib常见的类

Class Decs
LocalBluetoothAdapter 绝大部分都是对BluetoothAdapter间接调用
CachedBluetoothDeviceManager 管理已配对设备列表
BluetoothEventManager 接收蓝牙相关广播和蓝牙的一些回调,并根据UI操作执行到对应的事件
LocalBluetoothProfileManager 对外提供可用profile的访问
LocalBluetoothManager 统一管理CachedBluetoothDeviceManager、LocalBluetoothProfileManager、BluetoothEventManager创建和获取

 LocalBluetoothAdapter

LocalBluetoothAdapter使用的是装饰者模式,代理了BluetoothAdapter的一些方法,并扩展了极少功能;

CachedBluetoothDeviceManager 

CachedBluetoothDeviceManager管理已连接设备,里边用两个ArrayList一个Map来存储。助听器设备单独用了一个list存储;

 BluetoothEventManager

BluetoothEventManager接收蓝牙相关广播和蓝牙的一些回调,并根据UI操作执行到对应的事件。BluetoothEventManager设计思想也很简单,就是监听所有需要关心的蓝牙广播。收到状态后把传给CallBack或者其他Manager;

BluetoothEventManager的构造方法中,将所有需要监听的广播进行注册,然后一一匹配对应的Handler处理器进行Event处理;

LocalBluetoothProfileManager 

LocalBluetoothProfileManager是统一管理settings支持的profile的地方,提供profile的访问和状态变化监听;

注意,这里的Profile和package中的Profile的含义不一样,这个代表的是settings支持的Profile,而package中的Profile是定义了所有的Profile,从范围上看,package的范围要大于settings模块profile的范围;

该提供访问有效的蓝牙协议对象LocalBluetoothProfile;

 LocalBluetoothManager

LocalBluetoothManager是这个manager里最简单的了就是创建着几个manager,方便对外获取manager;

 总结文章来源地址https://www.toymoban.com/news/detail-847707.html

  • SettingsLib主要供settings使用,封装一些操作;
  • 主要设计4个部分:代理Adapter、管理配对设备、管理Profile、监听蓝牙状态;

到了这里,关于【Android】【Bluetooth Stack】Android Bluetooth架构分析(超详细)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    也可以说是蓝牙技术。所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,是由爱立信公司公司发明的。利用“蓝牙”技术,能够有效地简化掌上电脑、笔记本电脑和移动电话手机等移动通信终端设备之间的通信,也能够成功地简化以上这些设备与因特网Internet之间的通

    2024年02月05日
    浏览(33)
  • 【Android开发基础】蓝牙信息的获取(Bluetooth)

    描述:蓝牙技术是一种无线数据和语音通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备建立通信环境的一种特殊的近距离无线技术连接。蓝牙使当前的一些便携移动设备和计算机设备能够不需要电缆就能连接到互联网,并且可以无线接入互联网。

    2024年02月09日
    浏览(27)
  • Android Bluetooth(一)——蓝牙的开启和搜索

    Android 平台包含蓝牙网络堆栈支持,此支持能让设备以无线方式与其他蓝牙设备交换数据。应用框架提供通过 Android Bluetooth API 访问蓝牙功能的权限。这些 API 允许应用以无线方式连接到其他蓝牙设备,从而实现点到点和多点无线功能。 Android 应用可通过 Bluetooth API 执行以下操

    2024年01月16日
    浏览(30)
  • Android Studio 简要实现蓝牙(Bluetooth)通信(附加作业)

    1.两台设备可以通过蓝牙进行通信 2.模拟Client 和Server端实现简单的通信。 如果想让应用启动设备发现或操纵蓝牙设置,则除了 BLUETOOTH 权限以外,还必须声明 BLUETOOTH_ADMIN 权限。大多数应用只是需利用此权限发现本地蓝牙设备。除非应用是根据用户请求修改蓝牙设置的“超级

    2024年02月03日
    浏览(37)
  • Android蓝牙使能流程图(Android Bluetooth enable) -- java & jni层

    在介绍Android enable流程之前,我们首先来看下Android的流程图 以上图示是android8以上的,主要跟Android8之前的架构在于Bluetooth stack跟vendor层之间增加一层HIDL,主要是抽象硬件层的作用 OK,回归主题,我们来看下Android的enable流程,首先上一张架构图 另外声明下:我们做了一些列

    2024年02月09日
    浏览(32)
  • RK3288 Android11 RTL8723DS WiFi 和 蓝牙Bluetooth 适配

      瑞芯微RK系列对“REALTEK瑞昱公司”的wifi、蓝牙双模的模组都有内置适配的,因此HAL层、Framework层、协议栈及库文件都不需要移植适配,只需修改设备树和一些配置文件即可。 补充: RTL8723DS时钟输入源讲解   RTL8723DS模组的第24号引脚是模组的时钟输入源,需要给此提供

    2024年02月07日
    浏览(56)
  • MTK Android13 user版本进入engineermode的Bluetooth测试项时闪退

    平台:MT6771 android13 问题描述:进入到工模,点击进入Bluetooth测试项直接闪退 Log如下: 从日志咱们可以看到: 很明显这个服务没有注册,找到编译规则s0_vnd/device/mediatek/vendor/common/device.mk,可以看到以下: 可以看到只有在编译eng,userdebug版本时会编译em_hidl,那在编译规则中加

    2024年02月05日
    浏览(37)
  • android设置打开蓝牙时报错:java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission

    我的手机是三星s10,Android12,遇到的这个问题,供参考 问题出现场景,我是最近在研究一下蓝牙相关的,找了文档学习但是触动mBluetoothAdapter.enable();开启或者打开蓝牙的时候就报了下面这个错: 开始解错: 表面提示就是需要许可证/就是权限之类的缺少, 然后我就顺着这个错误去网上

    2024年02月13日
    浏览(35)
  • 【Bluetooth蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程

    我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强企业! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 大家好,我是董哥! 随着物联网技术的快速发展, WiFi 、蓝牙成了物联网通信主

    2024年01月18日
    浏览(24)
  • Android Studio制作手机App:通过手机蓝牙(Bluetooth)与STM32上的低功耗蓝牙(HC-42)连接通信,实现手机端对单片机的控制。

    背景: 本文的内容是针对单片机蓝牙模块(HC-42)开发的手机App。在这之前,我想先声明一点,手机与手机间的蓝牙连接方式”与“手机与HC间的蓝牙连接方式”是不一样的。原因就是手机搭配的是“经典蓝牙”模块,HC等蓝牙属于“低功耗蓝牙”模块。(二者的区别想了解的

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包