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新增接口成功下发同步指令后,还需要知道同步情况如何?同步失败增加错误流程处理;同步成功从系统数据库中提取数据处理或显示。

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

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

蓝牙 socket 建立不了_蓝牙电话之PBAP同步电话簿的安卓实现相关推荐

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

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

  2. Android-经典蓝牙(BT)-建立长连接传输短消息和文件

    参考: https://developer.android.com/guide/topics/connectivity/bluetooth http://bbs.eeworld.com.cn/thre ...

  3. python学习服务器端socket建立

    C/S模式简介 Tcp通信模型 Udp通信模型 python标准库中的socket模块 用socket建立TCP服务器端 用socket建立UDP服务器端 socket TCP服务器端测试代码 #co ...

  4. Socket详解-socket建立

    Socket建立 为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄.socket函数原型为: int socket(int domain, int type, ...

  5. 图解Java服务端Socket建立原理

    1.前言 1.1 目标 本文通过一个典型的java server socket代码,逐层剖析其tcp协议的服务端建立的原理,其中会涉及到linux内核的实现,本文会以简单通俗的图形将其中原理展示给大家 ...

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

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

  7. delphi socket 流的使用_基于TCP协议的Socket编程和通信_单向通信

    1.TCP:单向通信Socket之服务器端 import java.io.BufferedWriter; import java.io.IOException; import java.io.Outp ...

  8. 有关糖尿病模型建立的论文_预测糖尿病结果的模型比较

    有关糖尿病模型建立的论文 项目主题 (Subject of the Project) The dataset is primarily used for predicting the onset of ...

  9. Android蓝牙Socket通信

    Android的蓝牙部分暂且分为2.0,4.0,虽然苹果已经出了5.0版本了,咱先不说这个. 简单讲解一下,4.0是兼容2.0的功能的,今天讲的bluetoothSocket通信是在2.0上面就已经有 ...

最新文章

  1. Linux 守护进程的原理与实现
  2. Mardown(或Latex)换行
  3. mysql all 授权_mysql给数据库授权 GRANT ALL PRIVILEGES ON
  4. 解决Nginx+Tomcat下客户端https请求跳转成http的问题
  5. java判断实例_java判断类和实例的关系
  6. contos6.5卸载php7,centos8 测地卸载php5.6 与卸载php7
  7. aop springboot 传入参数_Springboot添加AOP打印请求参数
  8. windows mysql kip grant tables_数据库mysql数据库mysql: [ERROR] unknown option '--skip-grant-tables'...
  9. Java引入依赖aar,如何将JAR依赖项包含到AAR库中
  10. 【Python爬虫】Scrapy爬虫框架
  11. Hbase问题汇总与解答
  12. mysql 计算差值_Prometheus + Granafa 构建MySQL监控平台
  13. 寒武纪与华为海思分庭抗礼:中立芯片公司的成人礼
  14. Linux-定时任务(Crontab)基本用法
  15. sse java8_Java SSE 服务器推送WEB页面接收数据
  16. DNE-1 测试方法
  17. 【情感分析】基于Aspect的情感分析模型总结(一)
  18. python tests in xxx问题
  19. 自媒体多平台矩阵怎么做?该如何管理自媒体矩阵?
  20. 从红海里面寻找蓝海,看一个人的思维模式

热门文章

  1. R语言广义线性模型Logistic回归案例代码
  2. R构建岭回归模型(Ridge Regression)实战
  3. java jibx_Jibx 处理XML
  4. Science:便携式DNA测序仪在检测病毒疫情中大显身手
  5. linux之安装软件出现Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)解决总结
  6. ubuntu中安装rabbitmq
  7. import 别名_python中的import、from import以及import as的区别
  8. linux添加美式键盘,win8\win server 2012添加【中文--美式键盘】
  9. openGL入门3 --- rasterization pipeline
  10. 重温目标检测--YOLO v3