当前位置: 首页 > article >正文

理清contactsprovider

初步了解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的图做个了断:
                                             


http://www.lryc.cn/news/2414408.html

相关文章:

  • Fireworks MX 2004 对象的变形(转)
  • Weblogic安装部署步骤
  • WIn10 64位安装windows Mobile 设备中心不能启动或自动退出
  • Linux命令之chmod命令
  • VC++常用数据类型及其操作详解
  • 【Linux】红帽子安装过程超详细(学生教学用)
  • OpenCV机器视觉-HSV颜色模型
  • 多线程同步的方法
  • 英文论文完成后如何快速修改润色 PaperBERT
  • 物联网云平台——物联网应用、硬件、产业生态
  • android 4.4 linux 内核版本,稳定内核版本和更新  |  Android 开源项目  |  Android Open Source Project...
  • TNS-12531: TNS:cannot allocatememory的解决办法
  • chm文件无法打开的解决方法,chm电子书显示“此程序无法显示网页”的解决办法
  • MySQL基础下篇[表的创建/约束的使用/事务和范式以及索引的使用]~
  • POP3/IMAP/SMTP邮箱服务器地址和端口总结
  • 解决提示无法使用内置管理员账户打开Microsoft Edge的方法
  • 异常测试之Socket网络异常
  • Dreamweaver8-chs序列号
  • Mysql 中的decmical类型
  • 【机房重构】——存储过程(Stored Procedure)
  • bat知识点3_for循环
  • asp.net中打开新窗口的多种方法
  • web渗透思路及总结
  • 系统文件srclient.dll损坏出现错误提示的解决办法
  • showImg jquery插件 图片展示 js
  • 创造性思维(Creative Thinking)
  • 壁纸酷-高清,大图
  • 台达vfd一ⅴe变频说明书_DELTA台达VFD-E变频器接线图和接线注意事项
  • Kali Linux 网络扫描秘籍(二)
  • 禁止显示状态 错误    C2059    语法错误:“常数”