BT bluedroid connection_pbap

基于Android P版本分析

概述

一般情况下,我们在进行手机和车机的蓝牙配对过程中,会直接为手机和车机进行连接,一般情况下,会为设备赋予几项基本的蓝牙功能;

  • 通话音频 - HFP;
  • 媒体音频 - A2DP + AVRCP;
  • 共享联系人 - PBAP;

PBAP

蓝牙电话本访问协议

蓝牙电话簿协议PBAP,分为了两个角色:

  • PSE:手机端,作为服务端
  • PCE:车机端,作为客户端
PBAP架构

基于SDP协议用于发现PSE端服务,基于OBEX协议,使用request-response形式传输数据,通过RFCOMM协议创建channel来传递数据;

PBAP涉及相关协议
Protocol Description
PBAP 电话本访问协议,是一种基于OBEX的上层协议,该协议可以同步手机这些具有电话本功能设备上的通讯录和通话记录等信息
SDP 蓝牙服务发现协议,为应用程序提供了发现服务以及确定哪些服务属性是可以利用的能力
RFCOMM 简单传输协议,其目的为了解决如何在两个不同设备上的应用程序之间保证一条完整的通信路径,并在它们之间保持一通信段的问题。RFCOMM协议提供对基于L2CAP协议的串口仿真
OBEX 对象交换协议,用于在蓝牙设备间传数据对象,使用Request-Response形式实现在不同的设备、不同的平台之间方便、高效的交换信息

PbapClient connect

FW层面的流程分析,请参考:BT 电话簿加载分析

这里我们只随着FW的分析,继续分析涉及bluedroid层面的流程;

SDP_PbapClient UUID

这个过程其实和其他协议的逻辑类似,首先都是通过SDP协议找到对应的PbapClient UUID,之后才是根据找到的UUID进行进一步的逻辑处理。

SDP搜索结束之后,需要执行SDP_Search_Complete逻辑用于告知PbapClient UUID已找到,可以根据找到的UUID执行一些相应的逻辑;

电话簿同步

Request

这个过程可以是主动调用,也可以是被动的,最终都会执行到pullPhonebook方法中,而在PbapClient中,采用了Request-Response的形式请求的数据;

在PbapClient中,存在一个BluetoothPbapRequest,这个是一个基类Request,各个场景根据自己的实际要求,可以继承该Request封装实现自定义的Request,例如同步电话簿时,发送的Request为BluetoothPbapRequestPullPhoneBook就是根据BluetoothPbapRequest创建的;

在调用Request的execute方法中,其实是调用了OutputStream和InputStream的方式进行的数据下发操作,而OutputStream和InputStream则是通过BluetoothSocket中获取的,其最终通过Socket的方式实现了数据下发和数据获取;

Response

Request下发之后,bluedroid响应Request并返回对应的Response,其中就包含了请求的数据,即通讯录信息。

上报到上层之后,上层根据相应的业务逻辑来处理对应的通讯录信息。

之后的逻辑可以参考:BT 电话簿加载分析

通话记录同步

基本上和同步通讯录的步骤类似,只是传入的pbName不同,略;

协议数据包分析

协议数据包分析,请参考:BT Phonebook数据包分析

相关推荐
小蜗牛慢慢爬行22 分钟前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
丘狸尾1 小时前
[cisco 模拟器] ftp服务器配置
android·运维·服务器
小扳3 小时前
微服务篇-深入了解 MinIO 文件服务器(你还在使用阿里云 0SS 对象存储图片服务?教你使用 MinIO 文件服务器:实现从部署到具体使用)
java·服务器·分布式·微服务·云原生·架构
van叶~3 小时前
探索未来编程:仓颉语言的优雅设计与无限可能
android·java·数据库·仓颉
Crossoads7 小时前
【汇编语言】端口 —— 「从端口到时间:一文了解CMOS RAM与汇编指令的交汇」
android·java·汇编·深度学习·网络协议·机器学习·汇编语言
li_liuliu8 小时前
Android4.4 在系统中添加自己的System Service
android
C4rpeDime10 小时前
自建MD5解密平台-续
android
盛派网络小助手11 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
鲤籽鲲12 小时前
C# Random 随机数 全面解析
android·java·c#
快乐非自愿15 小时前
分布式系统架构2:服务发现
架构·服务发现