简单学:Android14中的Bluetooth—PBAP下载

名词介绍

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

  1. calllog_shadow.db 是通话记录数据库的一个影子数据库(shadow database),它主要用于保存最近的通话记录数据。
  2. Android 系统中的通话记录数据库由两个部分组成:一个是主数据库 calllog.db,另一个就是这个影子数据库 calllog_shadow.db。主数据库保存了所有的通话记录,而影子数据库只保存最近的通话记录。
  3. 这种设计可以提高通话记录的访问效率,因为应用程序通常只需要访问最近的通话记录,可以直接查询影子数据库,而不需要查询整个主数据库。

联系人:

/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 系统中非常重要的一个系统进程,它的主要作用包括:

  1. 联系人管理:

    • 这个进程负责管理和维护手机中的联系人数据,包括联系人信息的增删改查等操作。
    • 它与联系人相关的 ContentProvider 和 UI 界面进行交互,为其他应用程序提供联系人数据访问。
  2. 通话记录管理:

    • android.process.acore 进程还负责管理和维护手机的通话记录数据。
    • 它会将通话记录存储到数据库中,并为其他应用程序提供通话记录的访问接口。
  3. 来电/去电管理:

    • 这个进程会监听来电和去电事件,并进行相应的处理,比如记录通话记录、触发来电界面等。
  4. 联系人同步:

    • 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_CONNECTMSG_DOWNLOAD 做主要业务操作

2. BluetoothSocket & PbapClientConnectionHandler 类

构造函数与初始化

建立socket

建立OBEX对象交换协议

下载联系人和通话记录并插入数据库

参考资料:

blog.csdn.net/XiaoXiaoPen...

相关推荐
用户2018792831672 小时前
ANR之RenderThread不可中断睡眠state=D
android
小趴菜82272 小时前
安卓接入Max广告源
android
齊家治國平天下2 小时前
Android 14 系统 ANR (Application Not Responding) 深度分析与解决指南
android·anr
ZHANG13HAO2 小时前
Android 13.0 Framework 实现应用通知使用权默认开启的技术指南
android
【ql君】qlexcel2 小时前
Android 安卓RIL介绍
android·安卓·ril
写点啥呢2 小时前
android12解决非CarProperty接口深色模式设置后开机无法保持
android·车机·aosp·深色模式·座舱
IT酷盖2 小时前
Android解决隐藏依赖冲突
android·前端·vue.js
努力学习的小廉4 小时前
初识MYSQL —— 数据库基础
android·数据库·mysql
风起云涌~4 小时前
【Android】浅谈androidx.startup.InitializationProvider
android