多用户时,通话记录插入读取方式
2020-11-13 本文已影响0人
朱兰婷
数据库功能
每个用户的通话记录数据库有两个:calllog.db、calllog_shadow.db,分别由CallLogProvider、ShadowCallLogProvider创建。如图: 数据库功能.pngcalllog.db:
- 存储在data/user/userId/com.android.provider.contacts/databases中。
- 通过“content://userId@call_log/calls”访问。
calllog_shadow.db:
- 存储在data/user/userId_de/com.android.provider.contacts/databases中。
- 通过“content://userId@call_log_shadow/calls”访问。
多用户时的数据库
CallLogProvider所在Package com.android.provider.contacts属于android.process.acore进程,因此每个用户都有自己的db。如图:
多用户时的数据库
通话记录插入逻辑
Telecom在插入数据库时会判断这通通话是插入给所有用户还是给指定用户。
通话记录插入数据库方式.png
插入时通过ContentProvider#maybeAddUserId在Uri中加入userId来指定给特定用户。
通话记录同步逻辑
CallLogProvider启动时会从它的shadow db和其它用户的calllog db中同步数据: 数据库同步.png通话记录读取
因为CallLogProvider在启动时做了同步的工作,所以只要从CallLogProvider中读取数据就行。
附加功能
假如,我们现在需要让各个用户的通话记录完全独立要怎么做呢?
解答:Telecom在插入数据库时,指定userId且for_all_users字段设为0。
原创文章,欢迎转载,但请注明出处