名词介绍
1.电话仓库
- 手机本身的存储空间
- SIM卡的存储空间
2.电话本对象
① 主电话本对象(pb) : The main phone book object ,手机跟SIM卡中都有这个
② 来电电话本对象(ich): The Incoming Calls History object
③ 去电电话本对象(och): The Outgoing Calls History object
④ 未接电话本对象(mch): The Missed Calls History object
⑤ 组合电话记录对象(cch): The Combined Calls History object ,包括来电/去电/未接电话
⑥ 快速拨号电话本对象(spd): The Speed-Dial object ,V1.2才增加的内容
⑦ 收藏人电话本对象(fav): The Favorite Contacts object ,V1.2才增加的内容
3.电话本格式
Vcard的形式来标示,此部分需要注意:PSE(服务端)需要同时支持Vcard2.1跟Vcard3.0,并且编码必须以UTF-8的格式呈现。版本(vCard 2.1、vCard 3.0、vCard 4.0 AI了解一下)
vCard(虚拟名片)是电子名片的文件格式标准,通常以 .vcf
为扩展名。以下是 vCard 格式的详细说明:
makefile
FN:显示名称
N:姓;名;中间名;前缀;后缀
NICKNAME:昵称
PHOTO:照片URL或BASE64编码
BDAY:生日(YYYY-MM-DD)
ANNIVERSARY:纪念日
GENDER:性别(M/F/O/U)
TEL;TYPE=WORK,VOICE:工作电话
TEL;TYPE=HOME,VOICE:家庭电话
TEL;TYPE=CELL:手机
TEL;TYPE=FAX:传真
EMAIL;TYPE=WORK:工作邮箱
EMAIL;TYPE=HOME:个人邮箱
ADR;TYPE=WORK:;;地址街道;城市;省;邮编;国家
ADR;TYPE=HOME:;;家庭地址;城市;省;邮编;国家
等等
PBAP协议架构
电话本访问协议Phone Book Access Profile (PBAP)用于访问电话本对象(通过Vcard形式),是基于客户端/服务器的模型,一般用于client从server下载电话本。
Phone Book Server Equipment (PSE) 服务端
Phone Book Client Equipment (PCE) 客户端
V1.2以下架构
V1.2以上架构
两个架构在OBEX层以下稍微有点不同,V1.2之前是OBEX直接走RFCOMM,但是在V1.2后基于GOEP的版本,如果是GOEP V2.0以后那么走L2CAP ertm,如果是1.1版本,那么继续走RFCOMM,对旧版本做兼容!
PBAP特性(Feature)

Android14中的PBAP
Android中定义的 vcf 电话相关文件
通话数据库和对数据操作的进程
数据库db
通话记录:
/data/user_de/0/com.android.providers.contacts/databases/calllog_shadow.db
/data/user/0/com.android.providers.contacts/databases/calllog.db
- calllog_shadow.db 是通话记录数据库的一个影子数据库(shadow database),它主要用于保存最近的通话记录数据。
- Android 系统中的通话记录数据库由两个部分组成:一个是主数据库 calllog.db,另一个就是这个影子数据库 calllog_shadow.db。主数据库保存了所有的通话记录,而影子数据库只保存最近的通话记录。
- 这种设计可以提高通话记录的访问效率,因为应用程序通常只需要访问最近的通话记录,可以直接查询影子数据库,而不需要查询整个主数据库。
联系人:
/data/user/0/com.android.providers.contacts/databases/contacts2.db
/data/data/com.android.providers.contacts/databases/contacts2.db

操作进程:android.process.acore
android.process.acore 是 Android 系统中非常重要的一个系统进程,它的主要作用包括:
-
联系人管理:
- 这个进程负责管理和维护手机中的联系人数据,包括联系人信息的增删改查等操作。
- 它与联系人相关的 ContentProvider 和 UI 界面进行交互,为其他应用程序提供联系人数据访问。
-
通话记录管理:
- android.process.acore 进程还负责管理和维护手机的通话记录数据。
- 它会将通话记录存储到数据库中,并为其他应用程序提供通话记录的访问接口。
-
来电/去电管理:
- 这个进程会监听来电和去电事件,并进行相应的处理,比如记录通话记录、触发来电界面等。
-
联系人同步:
- android.process.acore 进程还负责管理联系人的同步功能,将手机联系人与各种云端账号(如 Google 账号)进行同步。
总的来说,android.process.acore 是 Android 系统中非常核心的一个进程,它负责管理手机中与联系人和通话相关的各种数据和功能,是系统运行的基础之一。如果这个进程出现问题,将会严重影响手机的联系人和通话相关的功能。
举例: 进程android.process.acore ---》进程号3986 这是一条,插入的电话记录数据操作信息
less
01-01 00:22:01.793 3968 4002 V SQLiteStatements: /data/user/0/com.android.providers.contacts/databases/calllog.db: "INSERT INTO calls ('_id', 'number', 'presentation', 'post_dial_digits', 'via_number', 'date', 'duration', 'data_usage', 'type', 'features', 'subscription_component_name', 'subscription_id', 'phone_account_address', 'phone_account_hidden', 'sub_id', 'new', 'name', 'numbertype', 'numberlabel', 'countryiso', 'voicemail_uri', 'is_read', 'geocoded_location', 'lookup_uri', 'matched_number', 'normalized_number', 'photo_id', 'photo_uri', 'formatted_number', 'add_for_all_users', 'last_modified', '_data', 'has_content', 'mime_type', 'source_data', 'source_package', 'transcription', 'transcription_state', 'state', 'dirty', 'deleted', 'backed_up', 'restored', 'archived', 'is_omtp_voicemail') VALUES (NULL, '13796026439', COALESCE(1, 1), COALESCE('', ''), COALESCE('', ''), 1609460504320, 0, NULL, 2, COALESCE(0, 0), 'com.android.bluetooth/com.android.bluetooth.hfpclient.connserv.HfpClientConnectionService', '28:02:44:11:B2:2E', NULL, COALESCE(NULL, 0), COAL
这条日志记录了一条蓝牙通话的插入操作。具体信息如下:
1. 时间戳: 2021-01-01 00:22:01.793
2. 进程ID: 3968
3. 线程ID: 4002
4. 数据库操作: 向 `calllog.db` 数据库的 `calls` 表中插入一条记录
5. 插入的数据:
- `_id`: 空值
- `number`: `13796026439`
- `presentation`: `1`
- `post_dial_digits`: 空值
- `via_number`: 空值
- `date`: `1609460504320` (2021-01-01 00:21:44)
- `duration`: `0` 秒
- `data_usage`: 空值
- `type`: `2` (表示呼出电话)
- `features`: `0`
- `subscription_component_name`: `com.android.bluetooth/com.android.bluetooth.hfpclient.connserv.HfpClientConnectionService`
- `subscription_id`: `28:02:44:11:B2:2E` 手机的蓝牙地址
- `phone_account_address`: 空值
- `phone_account_hidden`: `0`
.............
- `archived`: 空值
- `is_omtp_voicemail`: 空值
这条日志记录了一条通过蓝牙设备拨打的电话的详细信息,包括电话号码、通话时间、通话时长等。这些信息会被存储在 `calllog.db` 数据库的 `calls` 表中,用于记录用户的通话历史。
关键类与关键函数
1. 函数触发
PbapClientStateMachine.java状态机中,触发Handler发送
Connecting---》PbapClientConnectionHandler.MSG_CONNECT标记位
Connected---》PbapClientConnectionHandler.MSG_DOWNLOAD标记位
PbapClientConnectionHandler这个handler接收MSG_CONNECT 与 MSG_DOWNLOAD 做主要业务操作
2. BluetoothSocket & PbapClientConnectionHandler 类
构造函数与初始化
建立socket
建立OBEX对象交换协议
下载联系人和通话记录并插入数据库
参考资料: