初步了解android contact provider

  
        android的联系人数据单独拿出来做成ContactsProvider,众多的table和view整体看下来,使得联系人的数据错综复杂。但是我们在开发的过程并不需要将所有的table都搞清楚。用到最多的是 ContactsContract.Contacts、ContactsContract.RawContacts、ContactsContract.Data这三张表格。

先预览一下,一个联系人数据的存储结构:
可以很直观的看出。一个联系人在contacts2.db中(除了profile.db中的自己外),数据基本存放在3张表中,在ContactsContract.Contacts中会存在一条记录,在ContactsContract.RawContacts中可能存在多个记录,ContactsContract.Data中的数据是对ContactsContract.RawContacts的详细描述。

                     

                           (图1)

        ContactsContract.Contacts的表格大致如下,_id对应着的就是我们在contacts中看到的一个联系人。有一点需要注意的是,当删除掉一个联系人时,表中的记录会删除,但是_id并不会减少,而是一直增加,所以有可能看到的_id是1,2,4...这样的记录。

_id

starred

lookup

photo_id

1

0

...

<null>

2

0

...

<null>

4

1

...

1

ContactsContract.RawContacts的表格结构大致如下,它里面的记录主要是针对特定账户下的联系人数据的描述(data表中的数据)。这边的contact_id对应的是contacts表中的_id,一个联系人在raw_contacts表格中可能存在一条以上的记录,这主要是由于caccount_name和account_type不同造成的。
        这边需要用一个例子来帮助理解:
假设我在我的手机上有三个账户 gaojian@gmail.com、gaojian3301@gmail.com,这两个账户的“同步联系人”都被check上,当我添加一个联系人到手机里时,这个联系人会同时被备份到这个两个账户中去,所以这两个记录在raw_contacts表格中的contact_id会一样。

_id

contact_id

account_name

account_type

deleted

1

1

gaojian@gmail.com

com.google

1

2

1

gaojian1305039@163.com

163.com

0

data表格中记录的数据是对raw_contacts中数据的详细描述。这边的data1存储的值就是联系人在搜索时会search的值;data15用来存储一些比较大的二进制对象,比如说联系人的头像缩略图。
这一边需要注意一个事情:在我们开发或者测试的过程中,不要将与MMIETYPE格式不匹配的数据存入data中(比如将email的值设置为1233445),这可能会造成data数据的丢失,更甚者会导致provider出问题(这个我猜测比如在发送Email的时候,去选择contacts,返回值可能会有问题,没有验证过)。

_id

raw_contact_id

mimetype_id

data1

data2

data15

1

1

6

<null>

2

1

5

110

1

<null>

3

3

6

gaojian

gao

<null>

总结一下,我们可以从contacts中找到我们想要看的联系人,在raw_contacts中可以看到的是这个联系人一些数据的基本描述,而data提供给我们的是这个联系人所有的具体信息。这三张表格就是在平时开发中,打交道最多的表格。当然,如果要获取和修改群组的信息,那么还会接触到group这张表格;而筛选的表格对应的是search_index。
      
      放一张android官方api的图做个了断:

                                             

理清contactsprovider相关推荐

  1. 带你理清Node.js 的Web框架的3个层次

    web 框架指的是处理 http.https 的服务端框架,Node.js 提供了 http.https 模块用于处理协议数据,这是 web 框架的基础. 但是 http.https 的 api 过于 ...

  2. java websocket_理清 WebSocket 和 HTTP 的关系

    问题一 问题二 最后 <Netty 实现原理与源码解析 -- 精品合集> <Spring 实现原理与源码解析 -- 精品合集> <MyBatis 实现原理与源码解析 -- ...

  3. 你需要的不是重构,而是理清业务逻辑(转)

    最近我遇到了一位以前公司的同事.他提到了数年前我在那个公司曾经开发过的项目.他说这个项目现在已经变成了"职业杀手".基本上,任何接触过这个 "职业杀手"项目的人 ...

  4. 理清 WebSocket 和 HTTP 的关系

    最近公司内部同事分享了WebSocket相关的一些知识,之前也用过WebSocket做过一个即时通信的应用.基本上但凡提到WebSocket和HTTP的关系都会有以下两条: WebSocket和HTT ...

  5. 帮你理清 SpringBoot 与 SpringMVC 的关系

    spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc.spring mvc 只是spring 处理web层请求的一个模块. ...

  6. AI:几张图理清人工智能与机器学习、知识发现、数据挖掘、统计学、模式识别、神经计算学、数据库之间的暧昧关系

    AI:几张图理清人工智能与机器学习.知识发现.数据挖掘.统计学.模式识别.神经计算学.数据库之间的暧昧关系 目录 几张图理清人工智能与机器学习.知识发现.数据挖掘.统计学.模式识别.神经计算学.数据库 ...

  7. 科普文丨Java 单元测试相关概念理清

    对于从业Java的小伙伴来说,"单元测试"这个词你一定不陌生,如果你想要学习 Java 单元测试,下面的内容你一定要看! 近日,实验楼上线了新课<Java 单元测试入门实战& ...

  8. 教你理清SpringBoot与SpringMVC的关系

    spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc.spring mvc 是只是spring 处理web层请求的一个模块 ...

  9. 从部署 httpd 入手,理清 k8s 配置中的 containerPort、port、nodePort、targetPort

    注:文中各种内网.公网 IP 仅为示例,不保证所有 IP 都可以访问,且你的环境中 IP 可能不同. 背景 在上一篇文章 自己搭建一个k8s环境 中,我们一顿操作猛如虎,搭建出了由 1 个 maste ...

  10. 彻底理清重载函数匹配

    前言 前面我们讲到了<什么是函数重载?>,有了函数重载之后,就需要确定某次调用需要选用哪个函数.这个过程可以称之为函数匹配或者重载确定.大多数情况下,我们都很容易能够确定某次调用需要选用哪 ...

最新文章

  1. jsp 环境配置记录
  2. mysql 赋权_Mysql赋权
  3. 阿里云 rds 在windows 里面恢复
  4. BackgroundWorker
  5. 解决Spring Boot报错Mapped Statements collection already contains value for...Error while adding the mapp
  6. C4.5-Release8中Ross Quinlan对缺失值的处理
  7. SAP UI5 Repository and MongoDB Repository
  8. filter动态参数 maven_使用Profile和Resources Filter隔离测试环境
  9. linux编译内核后无法进入,编译linux内核,ubuntu,x86的环境出现warning,然后就出现无法启动ubuntu...
  10. 数仓中长跳转问题复现及解决方案
  11. 都在说 AI 与云计算融合,AI 在云中的作用真有那么大吗?
  12. mysql错误Table ‘./mysql/proc’ is marked as crashed and should be repaired
  13. 如何在Ubuntu上安装MariaDB
  14. 线性代数(六)正交性
  15. 微信小程序登录注册界面
  16. 表格用计算机做成横版的WPS,WPS表格怎么将表格横过来图文教程
  17. 算法笔记:使用A*算法解决八数码问题
  18. postgresql 手动启动_PostGreSql 手动安装
  19. 6 客户端认证方式 之 client_secret_basic client_secret_post
  20. U盘安装kali linux

热门文章

  1. vivado使用方法
  2. stata15中文乱码_Stata15:一次性转码,解决中文乱码问题
  3. 微信小程序公众平台如何生成小程序码
  4. chrome历史版本及重大变化(维基百科)
  5. UVC协议CT_ZOOM_RELATIVE_CONTROL选择子放大缩小停止的问题
  6. uniapp 打包成微信小程序
  7. python汉化之后好用吗_关于Python写的程序汉化心得和所走过的各种坑儿
  8. Oracle 安装 与 卸载 以及 使用 plsqldev
  9. PHP MySQL 数据字典生成器
  10. idea导入导出 settings 设置文件