- 博客(59)
- 资源 (4)
- 收藏
- 关注
原创 蓝牙电话之PBAP-优化通话记录的同步
优化通话记录的同步流程PBAP同步的通讯录一般包含联系人 + 通话记录,今天我们就来简单聊聊同步通话记录时的相关优化。通话记录分为 未接来电、呼入、呼出 这三种类型,每种类型的数据在手机端的存储路径如下图所示:需要哪种类型的通话记录就使用对应的路径名,因此安卓源码中PBAP的PCE端在pbap连接成功后自动依次同步这三种类型的通话记录然而实际项目中只是要求同步前N条通话记录过来就行,那这N条通话记录该怎么分配呢?如果每种类型分配 N/3 去同步的话会存在如下两个问题:在手机上排在前N条之
2021-11-24 18:30:00
3250
4
原创 安卓源码避坑指南9—AVRCP连接状态异常
AVRCP连接状态异常安卓版本:android-9(P版本)问题现象:断开设备,迟迟没有发出BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED的广播将连接状态切到 BluetoothAdapter.STATE_DISCONNECTED查看log可以发现各个主要协议都断开完成,那为何上述广播没有及时发出去呢?该广播是在 AdapterProperties.sendConnectionStateChange() 中触发的,没有触发说明if条件不满足if
2021-11-11 11:30:00
5713
7
原创 蓝牙抓包工具使用教程
蓝牙抓包工具使用教程一、 Ellisys Bluetooth Analyzer1、 测试环境准备Ellisys抓包卡设备,电源线 + USB连接线(接电脑端)Ellisys配套软件安装 :软件传送门软件安装成功后如下:2、 电脑端打开软件3、 操作蓝牙设备连接,软件界面会抓取到相关设备信息4、 获取蓝牙连接的 LinkKey值LinkKey值蓝牙连接的双方都会有保存,安卓默认存储位置为:/data/misc/bluedroid/bt_config.conf5、 双击软件界面中
2021-11-09 11:30:00
17203
7
原创 BLE 扫描结果的上报
BLE Scan 上报BLE扫描的目的是为了获取到周围环境中的BLE设备信息上报给应用层apk使用,本篇就来简单聊聊scan上报的那点事。根据协议可知,蓝牙芯片层会将扫描到的设备信息通过 LE Advertising Report event 事件上报到bluedroid,单个或者多个BLE设备的信息都可以同时上报,但是现行的芯片层处理方式都是依次上报,所以上报事件中参数Num_Reports都为1。还有同学不清楚 HCI_LE_Advertising_Repor 事件的直接点击这里《低功耗蓝牙BLE
2021-02-25 11:27:32
1155
原创 BLE扫描安卓实现
BLE扫描安卓实现低功耗蓝牙在市面上越发常见,使用的场景也不断地增加,接着《低功耗蓝牙BLE扫描》继续分享其在安卓系统是如何实现的。一切的技术或服务都是为应用而存在的,BLE也不例外,BLE发挥其强大功能的起点必是那些BLE相关的应用,第一步就是扫描周围环境中的低功耗蓝牙设备了。本期安卓代码使用的版本:Android – 9BLE应用开启扫描的接口如下两种方案:BluetoothLeScanner. startScan(),提供了多种接口,最简单的就是传入回调函数方便后续接收扫描到的结果Bl
2021-02-23 18:23:32
884
原创 安卓源码避坑指南8——上报profile连接状态地址为空值
上报协议连接状态地址为空值安卓版本:android-9(P版本)问题现象:上报a2dp-sink协议连接状态时,地址值为空导致蓝牙服务进程crash既然是a2dp-sink的状态变化广播中的地址值为空,那问题肯定就出在a2dp-sink的状态机A2dpSinkStateMachine中。全面分析完a2dp-sink的状态机中广播状态变化,只有如下场景下地址值可能为空值:正在连接设备A个过程中,设备B直接连接成功了,则上报设备A的连接状态变化时会出现地址空值设备B的地址值 device 是蓝
2021-01-29 11:27:11
410
原创 低功耗蓝牙BLE扫描
BLE扫描蓝牙扫描想必是蓝牙使用者最常操作的动作吧,那大家了解传统扫描和BLE扫描的区别吗?本篇我们就简单聊聊BLE扫描(scan)那点事。传统扫描:Inquiry,扫描周围环境中的BR/EDR蓝牙设备,常见于设置-蓝牙中的搜索BLE扫描:Scan,扫描周围环境中的低功耗蓝牙设备,常见于第三方APP搜索低功耗蓝牙(手环、手表、体脂秤等应用中)简单的BLE扫描其实也是分为多种扫描方式,按照协议主要分为如下两种:Passive Scanning — 被动扫描,蓝牙设备被动扫描周围环境中对等设备
2021-01-11 17:35:57
2145
4
原创 蓝牙音乐SRC侧的安卓实现
蓝牙音乐SRC侧的安卓实现随着电子产品的普及,越来越多的年轻人热衷于使用蓝牙技术来播放歌曲(相当多的手机品牌取消了耳机插孔),本篇文章就和大家聊聊蓝牙音乐SRC端在安卓系统中的实现原理。安卓系统参考版本:Android-9蓝牙SRC侧播放蓝牙音乐,音频数据都是从安卓音频系统发送过来的,蓝牙协议栈接收到音频数据处理再发送到SNK端进行播放,整体的流程大概如下图所示:红色框图标注的部分就是我们今天探讨的内容,在对蓝牙音乐SRC介绍之前,我们得简单了解下安卓中音频系统。安卓的audio系统播放音频都是
2020-12-24 14:05:02
2038
原创 蓝牙音乐静音
蓝牙音乐静音大家想必对静音功能不陌生,相关场景下该功能很实用。现在的终端设备上有整个音频系统的静音,当然也有局部功能的静音,其中的蓝牙音乐也是提供静音操作的,本期和大家简单分享下蓝牙音乐静音在安卓系统中的实现。蓝牙音乐的音频数据基本按照如下流程从 SRC 传送到 SNK:蓝牙音乐静音的实现方案从上图也就非常明了,当前的安卓系统主要是在音频数据上报到 SNK 端的蓝牙协议栈时不进行保存,从而没有解码后的音频数据送入安卓多媒体系统 AudioTrack 来实现的。上述方案的实现主要依赖协议栈 bti
2020-11-04 10:00:59
1334
9
原创 蓝牙音乐之歌词同步
蓝牙音乐之歌词同步旋律成就经典,歌词升华曲目,歌词作为最能体现一首歌曲深度的点,蓝牙音乐必然也少不了,本期分享就和大家聊聊蓝牙音乐歌词同步的故事。蓝牙音乐歌词都是从TG端(手机)的音乐播放器通过蓝牙技术传输到CT端的,因此保证音乐播放器打开该功能才能正确传输歌词。日常生活中常见的的几大音乐播放器的设置中都有该功能开关。常见的获取歌曲信息的AVRCP指令就如下两条,详情参考《蓝牙音乐之AVRCP常用指令介绍》。AVRCP Get Element Attributes(控制通道)AVRCP Get
2020-11-02 17:32:50
5637
19
原创 蓝牙音乐之绝对音量
蓝牙音乐之绝对音量蓝牙音乐播放中总是避免不了音量调节的操作,生活中最常见的场景就是手机连接蓝牙耳机或音箱播放音乐,通过调节手机上的多媒体音量达到蓝牙音乐音量调节的目的。这些功能是如何具体实现的,使用的技术的什么,你感兴趣吗?本篇文章我们就来一探究竟。蓝牙音乐音量调节有如下两种方法:音频数据增益绝对音量控制第一种方法是将手机端调节的多媒体音量大小,转化为音频数据的音量增益来间接达到控制音量,多见于安卓系统的设备上,最终的音量大小为音频数据音量增益和远端设备本身的音量设置共同作用的结果。下图为播
2020-10-13 16:55:43
13924
21
原创 安卓源码避坑指南7——蓝牙音乐播放状态一直为暂停态
蓝牙音乐播放状态一直为暂停态蓝牙音乐的播放状态是蓝牙音乐等相关应用重点关心的变量,应用根据该状态值(播放、暂停)实时更新界面图标显示。本期就和大家简单分享下蓝牙音乐播放状态上报错误的源码问题。播放状态都是通过 AVRCP 协议从手机端获取过来的,还不了解的同学查看前面的AVRCP系列文章,相信能给大家提供帮助。CT控制端获取播放状态有两种方法:AVRCP Get Play StatusAVRCP Register Notification(Event =Playback)方法1是蓝牙
2020-09-23 16:33:31
1823
4
原创 蓝牙电话之PBAP同步电话簿的安卓实现
PBAP同步电话簿的安卓实现蓝牙电话中同步电话簿基本包含两个流程:同步联系人 + 同步通话记录,那本期我们就简单聊聊安卓系统中蓝牙电话(PCE)的电话簿是如何同步的。本篇文章参考的安卓源码版本:Android 9(P版本),熟悉安卓源码架构的同学应该都清楚蓝牙这一套服务在其中所处的层级关系,由于现有的安卓API接口BluetoothPbapClient还没有集成相应的同步电话簿数据接口,即使是将要发布的最新Android 11版本中蓝牙API的同步电话簿的接口还是没有集成,但是蓝牙服务层com.and
2020-09-16 11:33:13
4148
9
原创 蓝牙自动配对警惕PIN码漏洞攻击
蓝牙自动配对警惕PIN码漏洞攻击配对是蓝牙设备间身份认证的一个过程,只有成功配对的两个设备才能连接并进行数据交互,所以配对是蓝牙操作中必不可少的流程。在《蓝牙配对协议分析一》和《蓝牙配对协议分析二》中已经简单介绍了配对的相关协议知识,还不清楚的同学可以先查看下这两篇文章,回来再阅读本篇分享可以更加地得心应手。蓝牙标准配对流程:PIN码配对:蓝牙2.0及以前版本使用的流程SSP简单安全配对:蓝牙2.1及之后版本新增的流程因为SSP相较于PIN码配对具有更高的安全性、更方便的操作性等优点,所以
2020-09-10 17:00:17
1902
原创 安卓源码避坑指南6——电话记录为空号触发蓝牙重启
电话记录为空号触发蓝牙重启对于空的电话记录想必大家都会感到很奇怪,今天就给大家分享个空电话记录引起蓝牙crash的原生问题。空电话记录的产生:在如今社会中,个人信息满天飞,相关从业者通过网络拨号软件拨打你的电话后,就会在你的手机上产生一条空的电话记录。触发蓝牙重启指的是PBAP协议PCE端的蓝牙进程crash,从而引发蓝牙自动重启的问题。追踪分析后问题根因主要在 CallLogPullRequest.updateTimesContacted() 中,该方法用来统计通话记录中相同联系人的通话次数,并
2020-09-09 15:59:12
523
原创 安卓源码避坑指南5——获取通话记录或通讯录的数量为负值
安卓源码避坑指南5——获取通话记录或通讯录的数量为负值通过蓝牙PBAP协议同步通讯录、通话记录时,想必对其数量大小也是很感兴趣的,因此一般的设计思路都是先获取到同步对象的总大小,然后再同步该对象的具体数据。想法是美好的,然而现实却很魔幻。获取同步对象的总数量这块最近就遇到个奇怪问题——获取到的总数量为负值,今天就和大家一探究竟,详解此类问题。测试环境:android-9车机系统(高通安卓源码)测试步骤:车机蓝牙配对连接手机车机同步通讯录、通话记录等(手机授权通讯录权限)测试现象:获取到的
2020-09-03 13:29:13
540
原创 蓝牙音乐之AVRCP常用指令介绍
蓝牙音乐之AVRCP常用指令介绍本篇我们不讲协议,不剖析安卓源码,就简单认识下实际蓝牙音乐中涉及的常用AVRCP指令。播放、暂停、上下首切歌指令都是成对出现的,模拟按钮的按压态,点击pressed,释放released,成对出现的两条AVRCP指令完成一个动作。1、AVRCP Play播放蓝牙音乐,使用AVCTP的AV/C格式的命令走控制通道2、AVRCP Pause暂停蓝牙音乐,同播放指令一样使用AV/C格式的命令走控制通道实际使用中由于CT端可能会快速发送两次播放或暂停指令,会触发部
2020-08-28 10:18:49
7595
3
原创 蓝牙音乐之AVRCP在安卓系统中的实现
蓝牙音乐之AVRCP在安卓系统中的实现从《蓝牙音乐之AVRCP》协议分析中可知,音视频远端控制协议被分成两部分:CT + TG,因此安卓源码也相应的分为 avrcp + avrcpcontroller 两部分。一般情况下avrcp对应TG,配置于手机等接收控制指令的设备,而avrcpcontroller则对应CT,配置在蓝牙耳机、车载蓝牙等可以主动发起控制的设备上。本篇文章分析使用的安卓版本:android-9(P版本)因为AVRCP中的指令都是以CT端发起请求,TG端做出答复的形式进行的,所以本期
2020-08-27 12:19:55
4557
13
原创 蓝牙音乐之AVRCP
蓝牙音乐之AVRCP蓝牙音乐实实在在地改变了我们听音乐的方式,尤其是iphone推出真无线耳机后,这一趋势更加明显。蓝牙音乐中不单单涉及到A2DP,对A2DP还不了解的小伙伴可以查看《蓝牙音乐之A2DP》,还有音乐远端控制功能(播放、暂停、切换歌曲等),而这些功能的实现都依赖于AVRCP协议。AVRCP:Audio/Video Remote Control Profile,音视频远端控制协议,所以该协议不但能控制蓝牙音乐,也可以控制视频流相应的功能。常见的使用到AVRCP控制功能的场景有如下几种:
2020-08-25 12:55:51
11464
原创 A2DP音频流在安卓系统中的实现
A2DP音频流在安卓系统中的实现通过前一篇文章《蓝牙音乐之A2DP音频流》的分享,大家都清楚了A2DP音频流的开启、暂停、数据传输等一系列协议规定,今天就带大家一探安卓系统中这部分是如何实现的。这篇文章主要分享下A2DP协议中SNK端的音频流的工作,那这就离不开 AudioTrack。AudioTrack的工作原理这里就不做说明,对安卓系统中的音频感兴趣的小伙伴相信你们可以找到学习渠道的。SNK端的AudioTrack是如何创建的已经在《A2DP连接在安卓系统中的实现》中讲解地很清楚了,A2DP音频流
2020-07-27 17:15:58
2951
2
原创 蓝牙音乐之A2DP音频流
蓝牙音乐之A2DP音频流A2DP音频流的建立已经在《蓝牙音乐之A2DP》中做了简单分享,本篇我们主要来说说音频流中两个重要的过程:开始、暂停由于音频流表示一种单向媒体数据,那么音频流两端的设备就显式地承担起 SRC 或 SNK 的角色,而设备具体的角色则取决于上层应用程序和应用场景。生活中最常见的 SRC 设备必然是手机了,SNK 设备则是各种各样的蓝牙耳机、音箱等。A2DP协议是基于AVDTP协议的上层协议,A2DP的动作最终都是通过AVDTP实现的,而AVDTP协议中关于过程的角色可以简单分为两
2020-07-17 09:56:03
3946
原创 A2DP连接在安卓系统中的实现
A2DP连接在安卓系统中的实现在上篇《蓝牙音乐之A2DP》中简要介绍完了A2DP音频流建立过程的协议分析,该过程主要通过协商双方的编码方式信息并设置一个最优的编码方式,最后通过AVDTP_OPEN建立A2DP连接。此连接最重要的是建立 信令通道 和 数据通道 这两条L2CAP链路。这篇主要和大家分享下安卓系统中如何实现A2DP的连接。安卓源码版本:Android-9(P版本)A2DP连接涉及到应用层、蓝牙服务层、蓝牙协议栈及蓝牙芯片等各个模块。由于蓝牙芯片因各厂家的实现方式不一致(主要是没有代码实现
2020-07-16 10:19:58
3309
6
原创 蓝牙音乐之A2DP
蓝牙音乐之A2DP本篇文章简单聊聊蓝牙音乐涉及到的A2DP协议,大家平常使用蓝牙耳机听音乐就是通过该协议实现的,此协议有时也被称为媒体音频协议。通过手机蓝牙设置中已连接的设备可以查看具体连接的哪些协议,那其中的媒体音频那一项就对应于本期所要分享的A2DP协议。A2DP:Advanced Audio Distribution Profile,高级音频分发协议的简写,在这里大家需要区分开高级音频和蓝牙音频,蓝牙音频一般指传输于蓝牙SCO链路上的音频,也就是蓝牙电话;而高级音频指的传输于蓝牙ACL链路上的高
2020-07-09 12:28:32
6328
7
原创 安卓源码避坑指南4—搜索中配对新设备失败
搜索中配对新设备失败有段时间没更新文章了,向各位朋友们抱拳了(主要这段时间项目比较忙,加班狗…)后续希望挤出更多时间来持续更新,那咱就赶紧开始本期的安卓避坑分享吧。测试环境:android-9车机系统(高通源码)测试步骤:点击蓝牙搜索搜索过程中点击搜索到的新设备进行配对连接测试现象:配对连接失败乍一看,操作步骤很正常啊,和大伙平常连接的操作是不是一模一样,怎么会失败呢?查看logcat如下:07-04 02:43:36.243 6346 6601 I bt_btm : BTM_S
2020-07-07 17:10:24
1072
4
原创 传统蓝牙搜索流程分析
传统蓝牙搜索流程分析本期承接上篇分享《传统蓝牙BR/EDR的搜索Inquiry》来聊聊安卓系统中传统蓝牙搜索是如何实现的。安卓系统中应用Application通过蓝牙适配器接口BluetoothAdapter.startDiscovery() 的调用触发搜索流程的开始,我们的分析也就从这里开启。安卓源码版本:Android 9,P(Pie馅饼)版本在分析之前对第三方应用有如下几个要求:确保蓝牙状态打开确保应用的清单文件 AndroidManifest.xml 中具有如下几个权限(也可动态申请
2020-06-05 13:52:49
1914
2
原创 传统蓝牙BR/EDR的搜索Inquiry
传统蓝牙BR/EDR的搜索Inquiry一提到蓝牙想必大家都会随口而出蓝牙音乐、蓝牙免提电话等等蓝牙技术提供的这些功能,这也是用户使用蓝牙的目的。但所有这些功能得以正常使用,有一个必要条件——蓝牙搜索。操作蓝牙的这些功能必须得知道对端蓝牙设备的存在,再与之建立ACL连接,那这就离不开这期的主题,本篇文章就简单介绍下传统蓝牙搜索Inquiry。蓝牙搜索协议简介参考文件:蓝牙核心协议《Core_v5.0.pdf》,第二卷,F部分搜索Inquiry顾名思义就是检测和收集周围环境中的蓝牙设备,根据询问的方
2020-06-03 17:00:16
1663
原创 安卓系统蓝牙配对流程分析
安卓系统蓝牙配对流程分析配对流程基本上始于首次连接一个蓝牙设备的过程中,本端的搜索流程结束获取到该设备的BluetoothDevice信息,就可以开启配对流程。配对,顾名思义就是将两个设备通过相关技术进行绑定,达到能够互相识别彼此的目的。因此通过蓝牙技术进行的配对就是大家理解中的蓝牙配对。随着蓝牙技术在消费市场上越来越普及,生活中很容易就能遇到蓝牙配对这一使用蓝牙功能事必不可缺失的步骤。本期我们就简单聊聊安卓系统蓝牙配对的流程是如何运行的。Application通过framework层Bluetoo
2020-05-25 17:06:48
2967
2
原创 蓝牙配对协议分析二
蓝牙配对协议分析二本篇接着《蓝牙配对协议分析一》来继续分析下SSP安全简单配对的完整流程。SSP流程总体上的消息序列图如下:从上图可以明显看出整个过程大概分为11个步骤,有些步骤存在不同的可选项,接下来依次讲解下每个步骤的流程。Step 1: Optional OOB Information Collection可选步骤,OOB信息收集。如果蓝牙设备支持OOB信息交换,则协议栈Host应该从蓝牙控制器Controller获取到OOB信息的C和R值,并将此信息传输到OOB系统。获取信息的流程图
2020-05-21 13:54:47
2725
4
原创 蓝牙配对协议分析一
蓝牙配对协议分析一蓝牙配对是整个蓝牙连接过程中必不可少的环节,配对的目的是通过各种方法创建共享的 链路密钥(Link Key),该密钥用于设备间连接时认证鉴权并加密相互交互的数据,使得蓝牙技术更具有安全行。密钥不但可以用于当前的连接中,还可以用于两个设备后续的重连过程中,但是鉴权过程中如果比较双方的Link Key不一致,则必须重新开始配对流程,从而创建新的链路密钥(Link Key)用于新的连接交互流程。链路密钥(Link Key)通过HCI命令HCI_Link_Key_Notification上报
2020-05-20 10:46:06
4176
原创 安卓系统中默认打开蓝牙 HCI snoop 文件的方法
蓝牙开发的同学想必一定遇到这样的问题:fastboot重刷完安卓系统后,snoop文件是默认不保存的。这对相当多蓝牙协议栈开发人员是一个麻烦,因为通过分析Host和Controller之间的消息交互能确定很多问题,那有没有什么方法打开这个snoop文件?那是必须有的,方法如下:1、手动打开snoop文件开关打开安卓系统中的开发人员选项:英文:System -> About phone -> Build number ,连续点击Build number 五次中文:系统 ->
2020-05-18 14:15:53
1846
1
原创 安卓源码避坑指南3——拨打电话的SIM卡无效导致蓝牙断开连接
安卓源码避坑指南3——拨打电话的SIM卡无效导致蓝牙断连它来了、它来了,它带着BUG赶来了,欢迎大家查看本期的安卓源码避坑指南。本期的问题场景比较特殊,电话SIM卡是无效的(欠费过期了,很是贫穷…)。开开心心地上着班、摸着鱼(-_-),突然工作邮件提醒,一经查看原来是QA同学甩过来个问题。那咱就话不多说,先简单介绍下本篇的问题场景。测试环境:Android 9的车机系统 + 手机中的SIM卡为无效SIM卡测试步骤:车机和手机使用蓝牙相互连接成功车机端主动拨打电话测试现象:由于手机中SIM
2020-05-14 10:23:42
856
2
原创 蓝牙自动重连机制
扒一扒蓝牙自动重连机制的实现原理在日常使用蓝牙的过程中,想必大家都发现了这样一个现象:连接蓝牙设备的手机在关闭再重新打开蓝牙后,会自动连接上先前连接着的那个设备,同样的场景对于安卓车机系统效果也是一致的。那这是怎么实现的呢,本篇文章我们就来聊一聊安卓系统中蓝牙的自动重连机制。由于蓝牙分为Server和Client两端,也就是手机和蓝牙设备(车机系统)这两类具体载体,所以蓝牙重连机制也会有所差异,但是整体上的流程基本相同:监听蓝牙的状态变化 -> 获取关闭蓝牙前连接的设备信息 -> 自动连
2020-05-11 10:20:08
9920
2
原创 蓝牙电话之PBAP-同步电话簿的几点注意事项
蓝牙电话之PBAP-同步电话簿的几点注意事项使用原生安卓同步完电话簿数据后,蓝牙服务层会直接将从手机端同步到的数据写入数据库,辅以同步状态的上报,这样蓝牙电话应用就知道何时触发从数据库中取出相应的联系人和通话记录等数据。然而实际运行测试下来也发现了不少问题,所以此篇就是简单记录下PBAP同步数据存储这块遇到的问题,以供大家参考。问题1:/data/data/com.android.providers.contacts/databases/calllog.db通话记录表中subscription_
2020-05-09 10:29:45
1444
2
原创 安卓系统蓝牙协议栈 bluedroid 的使能
安卓系统蓝牙协议栈 bluedroid 使能流程分析本文承接上篇文章《安卓中蓝牙系统服务层的使能流程分析》,接续分析协议栈层相关的使能流程,所以蓝牙协议栈bluedroid的使能始于JNI层enableNative()中调用协议栈接口enable()函数。话不多说,还是按照老规矩我们先从整体上对协议栈的使能有个印象,参考如下时序图。安卓原生的蓝牙协议栈bluedroid在分层上被分为b...
2020-05-08 10:22:13
2002
2
原创 安卓系统蓝牙服务com.android.bluetooth的使能
蓝牙系统服务层的使能流程分析蓝牙服务层的使能基础是其初始化完成,也就是AdapterService通过onBind()将AdapterServiceBinder上报给bind该服务的调用者。我们现在应该都知道在安卓系统中bind该服务的为BluetoothManagerService。本篇我们就从蓝牙服务管理收到bind的回调开启蓝牙使能流程的分析。熟悉安卓系统中bind服务机制的小伙伴应该...
2020-04-27 10:26:10
5413
3
原创 安卓系统中蓝牙协议栈的初始化流程分析
蓝牙协议栈初始化流程分析熟悉安卓系统中蓝牙基本架构的同学想必对蓝牙协议栈不会陌生,还不了解的也不必担心,出门左转查看我另一篇文章《安卓系统中蓝牙服务层的初始化流程分析》,那篇分析里有一幅蓝牙系统在安卓中的架构图,想来对初识蓝牙的小伙伴会有很大帮助。蓝牙协议栈整体上分为:HOST + Controller,它们之间以HCI为界线形象地分为上下两部分。Controller对应蓝牙固件也就是蓝牙...
2020-04-24 10:16:23
1383
原创 安卓系统中蓝牙服务层的初始化流程分析
安卓系统中蓝牙服务层的初始化流程分析蓝牙系统依赖于安卓,从上到下,层次分明。本篇文章我们就来简单分析下蓝牙服务层初始化的相关流程。首先来了解下安卓系统中的蓝牙模块大致分为以下几部分:对安卓系统启动时序有大概了解的小伙伴想必都知道蓝牙服务的管理对象BluetoothManagerService会在系统SystemServer启动过程中被初始化,处于系统进程中运行,然后在系统启动的不同阶段执...
2020-04-23 10:43:27
2078
2
原创 聊一聊蓝牙名字和地址的来龙去脉
蓝牙名字和地址蓝牙设备作为一种短距离无线连接的载体,由于其体积小、操作方便等优点,在耳机、车载和电脑键鼠等应用方面被越来越多的消费者所青睐,渐渐走入大众视野中。作为蓝牙设备的使用者,我们的第一想法往往是这个蓝牙设备的名字是什么,这样才知道去连接哪个蓝牙设备,而一个蓝牙名字又对应着全球唯一的蓝牙地址,这其实才是蓝牙设备的关键。本篇文章我们就来聊聊蓝牙名字和地址的这些事。蓝牙名字:蓝牙设备的...
2020-04-21 14:05:35
3705
10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人