多用户时,通话记录插入读取方式

2020-11-13  本文已影响0人  朱兰婷

数据库功能

每个用户的通话记录数据库有两个:calllog.db、calllog_shadow.db,分别由CallLogProvider、ShadowCallLogProvider创建。如图: 数据库功能.png

calllog.db:

  1. 存储在data/user/userId/com.android.provider.contacts/databases中。
  2. 通过“content://userId@call_log/calls”访问。

calllog_shadow.db:

  1. 存储在data/user/userId_de/com.android.provider.contacts/databases中。
  2. 通过“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。

原创文章,欢迎转载,但请注明出处

上一篇下一篇

猜你喜欢

热点阅读