蓝牙电话之PBAP-同步协议分析

在前一篇文章《蓝牙电话之PBAP协议分析》中从整体上分析了PBAP协议的内容,本章我们着重分析协议中的精髓——同步电话簿。PBAP协议存在的目的就是将PSE端的源数据同步到PCE,那么就让我们开启这段旅程吧。

每一种协议都会定义相关的功能features,PBAP同步也不另外,协议中主要定义了以下两种功能。

  • Download:此功能用于下载电话簿对象的全部内容

  • Browsing:此功能特别适用于需要滚动浏览电话簿的应用程序

PSE和PCE两端对这两种功能的支持见下图:

由于Download功能可以将电话簿对象的全部内容同步到PCE,从而PCE端获取到数据后完全可以通过蓝牙电话等应用程序将数据显示到界面,一样可以达到滚动浏览电话簿信息的目的,所以后面主要以Download为分析点,对Browsing感兴趣的同学,欢迎给我私信一起探讨该功能点如何使用。

Download这个功能特别适用于PSE端存储的电话簿容量相对较大,PCE设备通常从PSE端下载这些大容量数据并在其本地存储整个电话簿的场景下。PullPhonebook函数就是用来下载自己感兴趣的电话簿对象。

由于PBAP协议是基于OBEX的,所以PullPhonebook函数顾名思义也是采用request-response这种一问一答的形式传输数据。

请求格式

同步的电话簿对象名字Name值有如下几种选项:

回复格式

回复数据中的vCard对象只应包含使用属性选择器Attribute Selector参数指示的属性,并且应使用格式Format参数指示的格式组装数据。当前蓝牙PBAP协议中的vCard版本只有vCard 2.1和vCard 3.0这两种版本,所以我们在构造数据时选择其中一种vCard版本即可。

请求回复格式中需要重点讲解的只有一个参数:Application Parameters Header,其数据是由一组不同的tag组成整体的Application Parameters,可选的Tag如下图,比较常用的为红色框图标注出来的这六个tag:

这些tag中PropertySelector用于指示请求的vCard对象中应该包含的属性,PSE根据这些属性来组织回复的Body/End of Body Header中包含的数据,PCE只能使用此头接收所请求的vCard所需内容,PSE不得回复任何其他性能数据,除非PCE有其他要求。

因为PropertySelector的值是由一个64位的数据组成,所以每一位都代表了一种属性,如果PCE请求的电话簿需要包含对应的数据,就将该数据对应在PropertySelector的二进制位设置为true(1)。具体每一位的含义见下图:

同步电话簿中的信息时,最主要的关注还是联系人名字、联系人号码、联系人头像这三部分数据。所以要根据自己业务的真实需求来构造PropertySelector值,同步到PCE端相关应用需要的数据。

由于当前安卓源码还没实现PCE端的相关接口,需要适配自我实现。我这里采用的这套安卓代码是以高通源码为基础,加上功能适配后实现的一套PBAP同步代码,PCE端同步电话簿的流程大概为:获取同步对象的数量 –> 同步该对象。

接下来以HCI视角简单分析下同步流程:

1、 同步联系人

同步联系人整体上分为两步骤,先获取两种Name下的联系人数量,再根据数量分别同步对应Name下的联系人数据,以下两幅截图选取Name=telecom/pb.vcf为例进行说明,SIM卡的流程类似。

  • 获取联系人数量

  • 同步联系人数据

2、 同步通话记录

通话记录有三种类型及对应的vcf文件

  • MISSED:未接来电通话记录——mch.vcf

  • RECEIVED:已接来电通话记录——ich.vcf

  • DIALED:去电通话记录——och.vcf

但是还有一种类型的vcf文件包含以上三种类型,即cch.vcf,所以可以根据自己的需求选择同步哪种通话记录,我这边实现的是同步全部类型的通话记录(主要是分类型依次去同步通话记录,太麻烦了)

PCE端同步获取到电话簿数据后基本上有两种方式来处理数据:

  1. 通过回调方式上报给应用(需要添加相关回调打通APK-API-蓝牙服务这三层的关系)
  2. 存储在安卓系统提供的数据库中,上报应用相关状态,应用再从数据库中取出对应的数据

实际使用以上两种方式后,自我感觉通过回调方式上报数据速度很快,但数据库的优势是可以将数据已数据库的形式存储,不担心应用或安卓系统crash后导致的数据丢失问题。所以建议大家可以两种方式结合起来共同使用。

好了,蓝牙电话中关于PBAP协议同步数据的分析就总结到这,感兴趣的小伙伴欢迎私信留言一起讨论

更多互联互通技术,欢迎关注微信公众号:Connectivity

蓝牙电话之PBAP同步电话簿协议分析相关推荐

  1. 蓝牙 socket 建立不了_蓝牙电话之PBAP同步电话簿的安卓实现

    PBAP同步电话簿的安卓实现 蓝牙电话中同步电话簿基本包含两个流程:同步联系人 + 同步通话记录,那本期我们就简单聊聊安卓系统中蓝牙电话(PCE)的电话簿是如何同步的. 本篇文章参考的安卓源码版本:A ...

  2. 蓝牙电话之PBAP同步电话簿的安卓实现

    PBAP同步电话簿的安卓实现 蓝牙电话中同步电话簿基本包含两个流程:同步联系人 + 同步通话记录,那本期我们就简单聊聊安卓系统中蓝牙电话(PCE)的电话簿是如何同步的. 本篇文章参考的安卓源码版本:A ...

  3. 蓝牙电话之PBAP协议的连接

    蓝牙电话之PBAP-连接 前一篇文章<蓝牙电话之PBAP协议分析>大致讲解了PBAP协议的相关内容,本篇我们就开启PBAP连接流程的分析.由于PBAP的连接过程涉及到的知识点较多,有些地方 ...

  4. Alibaba Dubbo框架同步调用原理分析-1

    2019独角兽企业重金招聘Python工程师标准>>> 由于Dubbo底层采用Socket进行通信,自己对通信理理论也不是很清楚,所以顺便把通信的知识也学习一下. n  通信理论 计 ...

  5. RTSP再学习 -- RTSP协议分析(转载)

    最近一直在看 RTSP,但是RTSP协议是个啥?还没有搞清楚. 首先流媒体百度百科上有这样一段,从基本的名字上或多或少可以理解一下这些传输协议的区别.这很重要!! 传输协议 1.RSVP:资源预留协议 ...

  6. 温州大学计算机网络,数据通信与计算机网络(温州大学)实验四 - 运输层TCP和UDP协议分析.doc...

    温州大学 WENZHOU UNIVERSITY 实 验 报 告 学 期2016-2017学年第一学期课 程数据通信与计算机网络专 业电子信息科学与技术班 级14电科1学生姓名徐炜学 号14211111 ...

  7. ftp协议分析(一)

    作者: 肖建彬 | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明 网址:http://www.xiaojb.com/archives/it/ftp.shtml 根据是使用po ...

  8. 邮件服务器之POP3协议分析

    第1章. POP3概述 POP3全称为Post Office Protocol version3,即邮局协议第3版.它被用户代理用来邮件服务器取得邮件.POP3采用的也是C/S通信 模型,对应的RFC ...

  9. Tokyo Tyrant (ttserver)的master-slave复制协议分析

    Tokyo Tyrant (ttserver)的master-slave复制协议分析                                         The  replication ...

  10. Memcache的使用和协议分析详解

    Memcache的使用和协议分析详解 作者:heiyeluren 博客:http://blog.csdn.net/heiyeshuwu 时间:2006-11-12 关键字:PHP Memcache L ...

最新文章

  1. UA OPTI570 量子力学6 单个粒子的波函数空间
  2. 为什么WEB-INF外的jsp无法根据cookie享受国际化
  3. AIX 7.1 使用installp安装python的方法
  4. mybatis mysql 事务处理_详解Java的MyBatis框架中的事务处理
  5. 使用WITH AS提高性能简化嵌套SQL
  6. javascript之BOM对象总结
  7. idea查看git分支快捷键_开发常用Git/Linux/idea命令快捷键总结(持续更新)
  8. 图文:centos5.3下VMware虚拟机NAT上网实现
  9. wpf 开发 -TextBox背景自定义-Decorator
  10. 【金融财经】金融市场一周简报(2017-08-25)
  11. 某移动版网页源码留存
  12. react-native打包失败: Expiring daemon because jvm heap space is exhausted
  13. IDEA中使用UT测试过程中的一些小问题
  14. 企业微信的渠道活码怎么用?到底有什么好处?
  15. canvas手写签名
  16. python 设计模式
  17. 树莓派无线网络及VNC设置
  18. android 滑动导航栏颜色渐变,Android App页面滑动标题栏颜色渐变
  19. casewhen多条件查询_Mybatis(三)- MyBatis 多条件查询和模糊查询实例
  20. VC++中的各种文件的作用

热门文章

  1. 用计算机指令 自动化测试 信号源,一种应用于铁路微机监测采集板的自动检测工装系统的制作方法...
  2. 魔兽单机服务器修改升级属性,魔兽世界单机版怎么调整人物级别(用户使用)?20分...
  3. 赶超磁盘的磁带备份技术
  4. Unity学习笔记--无限地图(地图拼接)
  5. 毕业设计:基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类
  6. PSV1000刷黑商
  7. 手机号码归属地查询接口大全(七种)
  8. MySQL参数max_connect_errors分析释疑
  9. 电子电路计算机仿真应用,电子电路计算机仿真技术
  10. php爬虫模拟登陆爬取数据全过程