简单学: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...

相关推荐
TDengine (老段)5 小时前
TDengine 字符串函数 CONCAT_WS 用户手册
android·大数据·数据库·时序数据库·tdengine·涛思数据
会跑的兔子5 小时前
Android 16 Kotlin协程 第一部分
android·开发语言·kotlin
Meteors.6 小时前
安卓进阶——OpenGL ES
android
椰羊sqrt8 小时前
CVE-2025-4334 深度分析:WordPress wp-registration 插件权限提升漏洞
android·开发语言·okhttp·网络安全
2501_916008898 小时前
金融类 App 加密加固方法,多工具组合的工程化实践(金融级别/IPA 加固/无源码落地/Ipa Guard + 流水线)
android·ios·金融·小程序·uni-app·iphone·webview
sun0077008 小时前
Android设备推送traceroute命令
android
来来走走8 小时前
Android开发(Kotlin) 高阶函数、内联函数
android·开发语言·kotlin
2501_915921438 小时前
Fastlane 结合 开心上架(Appuploader)命令行版本实现跨平台上传发布 iOS App 免 Mac 自动化上架实战全解析
android·macos·ios·小程序·uni-app·自动化·iphone
雨白9 小时前
重识 Java IO、NIO 与 OkIO
android·java
啦啦91171410 小时前
Niagara Launcher 全新Android桌面启动器!给手机换个门面!
android·智能手机