美文网首页
多用户时,通话记录插入读取方式

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

作者: 朱兰婷 | 来源:发表于2020-11-13 19:50 被阅读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。

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

    相关文章

      网友评论

          本文标题:多用户时,通话记录插入读取方式

          本文链接:https://www.haomeiwen.com/subject/chrbbktx.html