PBAP同步电话簿的安卓实现

蓝牙电话中同步电话簿基本包含两个流程:同步联系人 + 同步通话记录,那本期我们就简单聊聊安卓系统中蓝牙电话(PCE)的电话簿是如何同步的。

本篇文章参考的安卓源码版本:Android 9(P版本),熟悉安卓源码架构的同学应该都清楚蓝牙这一套服务在其中所处的层级关系,由于现有的安卓API接口BluetoothPbapClient还没有集成相应的同步电话簿数据接口,即使是将要发布的最新Android 11版本中蓝牙API的同步电话簿的接口还是没有集成,但是蓝牙服务层com.android.bluetooth中相关的数据同步解析已实现,因此需要我们自己添加API打通framework到service的连接,这一部分很容易实现就不展开说明。

电话簿同步离不开PBAP协议的连接,文章《蓝牙电话之PBAP协议的连接》已经对安卓系统中的连接流程做出总结,还不清楚的同学可以先行查看。连接流程主要在蓝牙服务层和bluedroid协议栈间创建 socket 进行通信,那本篇的数据同步肯定也离不了这个socket。

打通framework层和蓝牙服务层之间的联系后,同步指令首先发送到PbapClientService,我们就以此为起点展开分析。

当前安卓源码中集成了联系人和通话记录一起同步的流程,且同步的对象数量都是全部同步过来(除了同步联系人时剔除掉了本机号码信息),联系人信息全部取过来还好理解,但是通话记录超多的手机(见过几万条通话记录的手机…)没有必要全部同步过来(很费时),因此各位还可以根据自己的需要重新适配蓝牙服务层中关于PBAP同步的逻辑。比如只同步最新N条通话记录等等操作。

先让我们来简单看下安卓系统中同步电话簿的时序图:

PBAP的PCE在安卓系统中同步数据的主要流程如上所述,这里就不贴代码了(我也不喜欢枯燥的讲解代码),需要跟踪代码流程的同学照着上面的时序图一步步分析就行了。

时序图中可以看出同步的主要流程在PBAP连接、断开、同步数据的子线程 PbapClientConnectionHandler 中完成的,通过 BluetoothPbapRequestPullPhoneBook 下发命令并对回复的数据进行解析。

数据解析主要通过com.android.vcard包中提供的相关方法完成,感兴趣的同学建议重点分析VCardEntry这个类。

数据最终会被存储于安卓系统自带的数据库中,对数据库的操作想必大家都有一定的基础,我就不做介绍了。
联系人数据库:/data/data/com.android.providers.contacts/databases/contacts2.db
通话记录数据库:/data/data/com.android.providers.contacts/databases/calllog.db

一点小建议
蓝牙电话等应用通过framework新增接口成功下发同步指令后,还需要知道同步情况如何?同步失败增加错误流程处理;同步成功从系统数据库中提取数据处理或显示。

因此蓝牙服务层在同步结束后需将同步结果告知应用,安卓系统中最简单的方法莫过于广播了。

感兴趣的小伙伴欢迎私信留言一起讨论,共同学习,一起进步!

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

蓝牙电话之PBAP同步电话簿的安卓实现相关推荐

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

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

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

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

  3. 两部苹果手机同步照片_安卓手机里的便签怎么导到苹果手机?安卓和苹果手机便签同步...

    很多手机厂商的手机操作系统都是基于安卓系统开发的,自由度很高,受到了很多用户的喜爱,在安卓手机里可以通过便签软件记录各种待办事项和计划安排.当安卓手机用旧了,换成苹果手机的时候,安卓手机里的便签怎么导 ...

  4. android iphone 同步通讯录,Apple ID 能同步 iPhone 和安卓手机通讯录吗?| 有轻功 #213...

    原标题:Apple ID 能同步 iPhone 和安卓手机通讯录吗?| 有轻功 #213 可以 换了新手机的兴奋感还没过去,数据同步的困扰就接踵而来. 我至今还记得以前总是不小心把联系人保存到本地(应 ...

  5. Android系统导入电话簿,将黑莓手机的电话簿导入安卓系统

    第一步: 1. 首先打开桌面管理器并连接至黑莓手机: 2. 打开电脑里的outlook: 3. 黑莓桌面管理器先打开管理器选项,进入页面后出现了一个[选择需要同步管理器数据]的页面: 4. 设置桌面管 ...

  6. RK3568平台开发系列讲解(蓝牙篇)蓝牙通讯协议PhoneBookAccessProfile(PBAP)同步通讯录

    文章目录 <font color=#0990d9>一.PBAP描述 <font color=#0990d9>二.通讯录获取流程 <font color=#0990d9&g ...

  7. icloud android同步到iphone6s,安卓手机竟能同步苹果iCloud:啥黑科技?

    在前段时间归入了联想后,ZUK发布了他们今年旗舰级新机Z2 Pro,号称有九项全球第一,其中一项为"全球第一个能与iCloud同步的旗舰手机",着实让人大吃一惊,因为大家普遍看法中 ...

  8. 蓝牙电话之PBAP-优化通话记录的同步

    优化通话记录的同步流程 PBAP同步的通讯录一般包含联系人 + 通话记录,今天我们就来简单聊聊同步通话记录时的相关优化. 通话记录分为 未接来电.呼入.呼出 这三种类型,每种类型的数据在手机端的存储路 ...

  9. android 音频显示器,安卓手机投屏(带声音同步)教程

    原标题:安卓手机投屏(带声音同步)教程 安卓手机投屏(带声音同步)教程 刚刚有网友咨询:手机投屏到大屏幕的同时怎么做到音视频分离,因为他有拉杆音箱.想要在手机投屏大屏幕的同时,声音在音箱里面. 安卓手 ...

最新文章

  1. ABAP-DOI技术的优化
  2. C# 中的委托和事件[转]
  3. java中访问修饰符_Java中的访问修饰符介绍
  4. 球球大作战显示中国服务器较差,球球大作战延迟卡顿原因分析及解决方法
  5. ruby imap抓取inbox中所有邮件的主题
  6. 无法访问windows安装服务_win7系统提示无法访问windows安装服务如何解决【解决方法】...
  7. HightCharts与后台交互
  8. ASP.NET Core 异常处理与日志记录
  9. _self.$scopedSlots.default is not a function报错
  10. Android 性能测试之方向与框架篇
  11. 苹果se2_苹果12mini登场后SE2彻底沦为智商检测机?网友:太高明
  12. 19.docker attach
  13. 五笔输入法的学习记录
  14. html转pdf分页问题终极解决方案 k-htmlpdf
  15. python求均值函数_python求列表平均值函数
  16. 风车IM即时通讯聊天系统源码_聊天APP_附APP_带安装教程
  17. 六种礼仪帮助你赢得面试
  18. 还不懂苹果的税收政策及结算问题?看这篇就够了!
  19. 样本不平衡的常用处理方法
  20. 【JavaScript编写计算工资小程序】【表格细边框设置】【网页设计与网站开发HTML、CSS、JavaScript实例教程】【第十章】JavaScript基础——【传智播客】实验作业题【实验5】

热门文章

  1. 每日一题——删除排序链表中的重复项 II
  2. C语言 输入月份,输出该月有多少天(假设不考虑闰年的情况下)。
  3. 少儿编程教育好不好---《浅谈青少儿编程教育与计算思维》
  4. 三星SCX-4521F 4725F内存接收墨粉用尽问题
  5. java进销存培训_Java学员作品-企业进销存管理
  6. Socket并发配置之一config的配置
  7. ask信号调制matlab,基于Matlab的ASK数字调制系统仿真
  8. 06 MyBatis缓存
  9. 美颜滤镜:早已不是简单的磨皮美白
  10. 计算抽象:可计算理论、模型与计算机