Android 蓝牙
文章平均质量分 90
本专栏主要对蓝牙基础、常用协议及功能的源码进行分析,主要是在车载Framework层的角度去看相关功能及调用流程。源码部分是以Android 12为主。。文章内容会随着博主的工作积累不断更新完善。
优惠券已抵扣
余额抵扣
还需支付
¥69.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
c小旭
Android Framework车载智能座舱开发工程师
展开
-
Android 蓝牙——HFP协议连接状态(二十五)
前面已经对 HFP 协议做了相关介绍,同时也对 BluetoothHeadsetClient 中提供的接口做了简单介绍,但对于 HFP 协议的连接状态不仅仅是用户调用连接/断开接口才会发生变化,在实际开发中会有各种问题导致 HFP 协议连接状态发生改变。例如作为车机端开发,在手机端断开蓝牙连接时需要回调通知车机端。原创 2024-05-23 09:18:09 · 855 阅读 · 1 评论 -
Android 蓝牙实战——蓝牙电话通话状态同步(二十四)
前面分析了蓝牙电话通话状态的广播,我们可以在蓝牙电话中实时监听蓝牙电话的状态,但如果是其他音乐类 APP 呢,在播放的时候也需要知道当前是否有通话正在进行,但是有完全没必要实时监听电话的状态,这就需要一个获取通话状态的方法。原创 2024-05-09 09:51:02 · 656 阅读 · 2 评论 -
Android 蓝牙实战——蓝牙电话通话状态分析(二十三)
在前面的中我们知道了蓝牙电话主要使用的是 HFP 协议,这里我们主要分析一些客户端如何获取蓝牙电话状态的变化。原创 2024-05-09 09:50:17 · 922 阅读 · 1 评论 -
Android 蓝牙实战——蓝牙音乐播放/暂停状态(二十二)
对于蓝牙音乐的播放状态,我们首先主要处理的是 onPlayStatusChanged() 回调,这是协议栈通知 FW 层的一个回调接口。还有一个就是 getPlayBackState() 方法,这是媒体应用在初始化时未收到回调信息主动获取当前状态的方法。我们这里就来分析一下这两个状态的获取流程。原创 2024-05-08 09:42:18 · 933 阅读 · 0 评论 -
Android 蓝牙实战——蓝牙音乐播放/暂停调用(二十一)
通过前面的学习我们了解了蓝牙开发中的各个协议,同时也知道蓝牙音乐的开发需要使用的是蓝牙的 a2dp 和 avrcp,而对蓝牙音乐的控制使用的是 avrcp,这里我们就梳理一下蓝牙音乐播放的调用流程。原创 2024-05-08 09:39:52 · 557 阅读 · 0 评论 -
Android 蓝牙实战——蓝牙音乐播放进度(二十)
对于蓝牙音乐的开发来说,播放进度是一个比较重要的数据参数,这里我们就来分析一下蓝牙音乐播放进度的相关回调。原创 2024-05-07 09:00:39 · 845 阅读 · 1 评论 -
Android 蓝牙——HCI log 分析(十九)
打开客户端导入文件选择 log 类型为 BtSnoop Files还有一种方式是将btsnoop_hci.log的后缀修改为btsnoop_hci.cfa,就可以直接用Capture File Viewer打开。选择 Frame DisplayFrame Display主界面。原创 2023-02-28 16:36:42 · 2536 阅读 · 2 评论 -
Android 蓝牙——自动重连机制(十八)
在日常使用蓝牙的过程中,想必大家都发现了这样一个现象:连接蓝牙设备的手机在关闭再重新打开蓝牙后,会自动连接上先前连接着的那个设备,同样的场景对于安卓车机系统效果也是一致的。本篇文章我们就来聊一聊安卓系统中蓝牙的自动重连机制。由于蓝牙分为Server和Client两端,也就是手机和蓝牙设备(车机系统)这两类具体载体,所以蓝牙重连机制也会有所差异,但是整体上的流程基本相同:监听蓝牙的状态变化->获取关闭蓝牙前连接的设备信息->自动连接。原创 2023-02-09 10:26:33 · 2762 阅读 · 0 评论 -
Android 蓝牙——Avrcp协议获取歌曲信息(十七)
以上是对获取歌曲信息的流程进行简单分析,至于APP部分如何获取歌曲信息这里就不做研究,有兴趣的可以参考。原创 2023-01-31 18:37:08 · 1292 阅读 · 0 评论 -
Android BLE蓝牙——服务端源码(十六)
本文需要结合这篇文章一起看,因为本文是根据服务端实现的流程进行对应的源码进行分析的。原创 2023-01-31 11:14:43 · 850 阅读 · 0 评论 -
Android BLE蓝牙——客户端源码(十五)
之前的两篇文章都是参考大佬的博客完成了应用层客户端与服务端的开发,下面我们按照之前的流程对源码进行分析。原创 2023-01-30 11:16:10 · 833 阅读 · 0 评论 -
Android BLE蓝牙——服务端实现(十四)
如下(这里只是个举例,可以根据项目需求扩展)消息号(1个字节)功能(1个字节)子功能(1个字节)数据长度(2个字节)数据内容(N个字节)CRC校验(1个字节)01010100002D。原创 2023-01-28 17:34:02 · 1257 阅读 · 0 评论 -
Android BLE蓝牙——客户端实现(十三)
表示蓝牙GATT服务,包含多个Characteristic(属性特征值),含有唯一的UUID作为标识。getDevice:获取服务关联的设备setDevice:设置服务关联的设备addService:添加包含的服务addCharacteristic:添加特性getCharacteristic:通过 UUID 和 instanceId 获取特征getInstanceId:获取 instanceIdsetInstanceId:设置 instanceIdgetHandles:获取 Handles。原创 2023-01-28 16:47:30 · 599 阅读 · 0 评论 -
Android 蓝牙——Avrcp协议(十二)
v1.0:基本的远程控制命令,如播放、暂停、切歌v1.3:新增获取音乐当前的播放状态以及播放音乐的歌曲信息(歌曲总时长、当前播放位置、歌曲名、专辑名、歌手)v1.4:新增浏览功能,支持绝对音量调节v1.5:相关协议已通过的更改以纠正各种错误v1.6:新增两个特性:1)项目的数量:用于控制器的接口,请求和接收文件夹中的项数,而无需下载列表2)封面艺术:支持通过基于OBEX协议上的BIP(Basic Imaging Profile)协议将图像传输到媒体项目。原创 2023-01-28 11:05:36 · 7932 阅读 · 2 评论 -
Android 蓝牙——A2DP协议(十一)
SDK路径:frameworks/base/core/java/android/bluetooth/服务路径:packages/apps/Bluetooth/src/com/android/bluetooth/在使用协议类的时候无法找到该类,由于安卓源码中关于蓝牙协议的 Client 部分或相关接口都被 @hide 给隐藏掉了,这样 android.jar 满足不了安卓源码 framework 层开发人员的需求,可以使用反射机制或者引用 framework.jar 代替 android.jar。原创 2023-01-28 09:19:35 · 1836 阅读 · 0 评论 -
Android 蓝牙——PBAP协议(十)
SDK路径:frameworks/base/core/java/android/bluetooth/服务路径:packages/apps/Bluetooth/src/com/android/bluetooth/在使用协议类的时候无法找到该类,由于安卓源码中关于蓝牙协议的 Client 部分或相关接口都被 @hide 给隐藏掉了,这样 android.jar 满足不了安卓源码 framework 层开发人员的需求,可以使用反射机制或者引用 framework.jar 代替 android.jar。原创 2023-01-19 11:03:50 · 2537 阅读 · 0 评论 -
Android 蓝牙——HFP协议(九)
SDK路径:frameworks/base/core/java/android/bluetooth/服务路径:packages/apps/Bluetooth/src/com/android/bluetooth/在使用协议类的时候无法找到该类,由于安卓源码中关于蓝牙协议的 Client 部分或相关接口都被 @hide 给隐藏掉了,这样 android.jar 满足不了安卓源码 framework 层开发人员的需求,可以使用反射机制或者引用 framework.jar 代替 android.jar。原创 2023-01-19 10:59:21 · 1651 阅读 · 2 评论 -
Android 蓝牙——MAP协议(八)
SDK路径:frameworks/base/core/java/android/bluetooth/服务路径:packages/apps/Bluetooth/src/com/android/bluetooth/在使用协议类的时候无法找到该类,由于安卓源码中关于蓝牙协议的 Client 部分或相关接口都被 @hide 给隐藏掉了,这样 android.jar 满足不了安卓源码 framework 层开发人员的需求,可以使用反射机制或者引用 framework.jar 代替 android.jar。原创 2023-01-19 10:47:33 · 3489 阅读 · 0 评论 -
Android 蓝牙——协议配置(七)
android overlay 机制允许在不修改 packages 中 apk 的情况下,来自定义 framework 和package 中的资源文件,实现资源的定制。来达到显示不同的 ui 的目的(例如MIUI)。原理是在通过AAPT打包成APK时,通过-S命令多增加了一个资源目录(overlay目录),我们平时打包APK只是通过AAPT -S指定了一个资源目录,而Overlay又额外增加了一个资源目录。AAPT -S命令可以指定多个资源目录,overlay的资源将替换原res中的重名文件。原创 2023-01-19 10:04:51 · 2849 阅读 · 0 评论 -
Android 蓝牙——蓝牙连接(六)
还有说异常就重连,三次就会成功。源码位置:/packages/apps/Bluetooth/jni/com_android_bluetooth_btservice_AdapterService.cpp。建立连接时,如果没有建立过配对关系,那么连接时会先去建立配对关系,然后再执行连接;源码位置:/frameworks/base/core/java/android/bluetooth/BluetoothSocket.java。建立连接时,如果没有建立过配对关系,就会跳过配对过程,直接执行连接。原创 2023-01-18 15:59:07 · 1856 阅读 · 0 评论 -
Android 蓝牙——蓝牙配对(五)
配对是用来与连接设备创建加密连接的过程。1、蓝牙配对成功后才进行各种协议(A2dpSink、HFPClient、PbapClient等)的连接。2、配对过程中的ssp_request,即加密请求,需要用户同意,也可以由 Framework 侧自动回复同意,不弹出用户提示框。3、配对成功需要两个条件:a.协议栈 bondStateChangeCallback 回调通知 BOND_BONDED。b.devicePropertyChangedCallback 回调通知更新配对设备的UUIDs。原创 2023-01-18 14:45:26 · 2596 阅读 · 1 评论 -
Android 蓝牙——设备查找(四)
BTU TASK收到消息后,调用 bta_dm_main.c 的(用于DM的状态机事件处理函数) bta_dm_search_sm_execute() 执行状态切换和 inquiry 流程。源码位置:packages/apps/Bluetooth/jni/com_android_bluetooth_btservice_AdapterService.cpp。源码位置:/system/bt/bta/dm/bta_dm_api.cc。源码位置:/system/bt/btif/src/btif_dm.cc。原创 2023-01-18 10:49:10 · 1197 阅读 · 0 评论 -
Android 蓝牙——基础开发(三)
蓝牙开发这部分主要以 APP 端调用功能接口为开始,到 Framework 端的调用流程,最后到调用状态机结束,不涉及蓝牙协议栈的开发分析。原创 2023-01-17 17:40:55 · 1170 阅读 · 0 评论 -
Android 蓝牙——系统服务(二)
BluetoothManagerService 是 Android 操作系统中的一个系统服务,它负责管理设备的蓝牙功能。该服务提供了一组API,供应用程序与蓝牙功能进行交互,包括打开和关闭蓝牙、搜索和配对其他设备、建立蓝牙连接等操作。BluetoothManagerService 还负责管理蓝牙硬件的驱动程序和蓝牙协议栈的运行。通过这个服务,应用程序可以方便地与蓝牙设备进行通信和交互。原创 2023-01-17 17:26:05 · 1144 阅读 · 0 评论 -
Android 蓝牙——概述(一)
Profiles (蓝牙应用规范),它从应用场景的角度为蓝牙技术的使用制定了不同的规范。这也是和大众日常生活接触最多的一部分。蓝牙支持很多Profiles:MAP:(MessageAccessProfile),短信访问协议,允许设备间的信息交换,短信。使用场景:智能车载中同步短信等信息。HFP:(Hands-free Profile),电话免提协议,让蓝牙设备(如蓝牙耳机/车机)可以控制电话,如接听、挂断、拒接等。原创 2023-01-17 16:04:25 · 2184 阅读 · 0 评论