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

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

作者: 朱兰婷 | 来源:发表于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。

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

相关文章

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

    数据库功能 每个用户的通话记录数据库有两个:calllog.db、calllog_shadow.db,分别由Cal...

  • Android端通话记录读取

    Android端读取手机通话记录,直接上代码: public classCallInfo { publicStri...

  • 提问:USB2.0的接口无法识别USB3.0的U盘?

    USB3.0的U盘插入USB2.0的接口,显示“无法识别的USB设备”,插入USB3.0接口时才可以正常读取,怎么...

  • Python操作MySQL

    MySQL操作 读取数据read_sql() 读取csv插入MySQLLOAD DATA LOCAL INFILE...

  • 对于幻读的理解

    定义:事务A 按照一定条件进行数据读取, 期间事务B 插入了相同搜索条件的新数据,事务A再次按照原先条件进行读取时...

  • OpenGL 纹理

    OpenGL纹理 1.认识函数 像素存储方式 从颜色缓存区内容作为像素图直接读取 载入纹理 更新纹理 插入替换纹理...

  • 七、OpenGL纹理

    OpenGL纹理 1. 认识函数 像素存储方式 从颜色缓存区内容作为像素图直接读取 载入纹理 更新纹理 插入替换纹...

  • Hash数据结构

    HashMap 实现原理 hashmap是由数组和链表共同组成的,数组的特点是插入慢读取快,链表的特点是插入快读取...

  • 【MySQL必知必会】第19章:数据插入

    INSERT时用来插入(或添加)行到表的,插入的方式有一下几种: 插入完整的行 插入行的一部分 插入多行 插入某些...

  • OpenGL 纹理、Mip贴图

    1、函数 像素存储方式 从颜⾊色缓存区内容作为像素图直接读取 载入纹理 更新纹理 插入替换纹理 使用颜⾊缓存区加载...

网友评论

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

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