Android 蓝牙笔记-uuid&profile

本文档记录了Android 9.0版本的蓝牙框架学习,包括8.0以上的变化,蓝牙协议栈和UUID的作用。UUID是记录蓝牙设备功能的关键,用于确定设备间能否进行特定交互。Profile代表应用场景,例如A2DP Source/Sink、AVRCP等。通过设备的UUID列表,Android应用可以判断并启用相应的Profile进行交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 蓝牙体系学习记录-UUID&PROFILE

平时总是忙, 上班事情多, 还总是加班, 搞得好像没时间做笔记了, 实际上还是因为没有养成习惯. 做笔记不仅能帮助自己记录学习的东西, 也能给需要的人提供帮助.

该文档记录学习蓝牙的笔记。之前一直模模糊糊的知道蓝牙的接口, 也写过蓝牙相关的app, 但总是很模糊, 每次做项目遇到蓝牙相关的开发心里都没底, 这次决心花些时间学习蓝牙的整个体系.

大体的学习思路大概是先描述一下蓝牙的整体框架, 然后对从APP层, framework层, 再到协议栈, 底层rfkill驱动, 再到蓝牙芯片模块, 硬件设计分别描述.
体系学习完了后,再具体到蓝牙到开发, 比如蓝牙音箱, 蓝牙耳机, 蓝牙AVRCP控制, 蓝牙接电话, 传文件.

由于学习是基于9.0的版本学习, 同时也是跟着解决公司项目问题. 我看Android的源码8.0以上有改动, 一方面蓝牙协议栈使用了Treble, 另外8.0以上的版本也支持了蓝牙5, 当然,要使用蓝牙5得蓝牙芯片模组本身支持.

Android 8.0以上蓝牙的框架

首先引用Android 官方的框架描述

上面这张图是8.0以上版本的框架.基于这个框架来看源码, 有安卓源码的朋友可以根据下面路径来看

  1. 从谷歌的框架来看, app和framework的android.bluetooth都归置为同一层. 应用可以看看安卓原生的Settings,或者TvSettings, 这两个APK的源码在源码packages/apps/Settings, packages/apps/TvSettings目录下, 这两个APK使用的是framework的接口,以及蓝牙进程的服务. framework目录是在framework/base/core/java/android/bluetooth目录
  2. 蓝牙进程和JNI在packages/apps/Bluetooth目录下. 所有的Profile的服务都在这里启动和控制.
  3. 蓝牙协议栈在system/bt目录,主要实现逻辑链路控制和适配协议层. 这里具体分为BTA (Bluetooth App Layer) 和 BTE (Bluetooth Embedded System).承接它和蓝牙进程的JNI的是 /hardware/libhardware/include/hardware/bluetooth.h
  4. HIDL 是8.0以上供应商必须使用的了, 以前供应商只需要实现libbt-vendor. vendor 库源码 /hardware/broadcom/libbt, 控制硬件power, uart.
  5. RFKILL驱动, RFKILL驱动给HAL层提供了数据操作, 蓝牙模块供电控制接口.

UUID

以前总是遇到各种为什么有些Android设备连上后发送不了文件? 为什么两个手机连上后不能像连蓝牙音箱一样播放歌曲呢? 为什么别人的蓝牙可以连打印机打印? 为什么我的蓝牙耳机不能接电话? 所以, 我们怎么知道一个蓝牙设备有哪些功能呢, 连上它后, 它能不能接收我们发送的声音,能不能传文件给它, 简而言之, 我们怎么知道这个蓝牙设备的能力呢? 然后另一个设备需要什么样的能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值