Android的通讯录数据库表结构

来源:互联网 发布:cg绘画软件 编辑:程序博客网 时间:2024/05/01 02:20

最近在做一个项目,里面涉及到系统通讯录的问题,就做了一天多的尝试,也查看了一些网上的文章,做了简单的总结。

            android的通讯录数据库存放在/data/data/com.android.contact.provider/contacts2.db中。这里面的几张表是有关系的:data,contacts,groups,mimetypes,raw_contacts.这五张表中的数据是相互关联的,所以在查询一些数据的时候,需要将表进行联系,但是android中对于系统的数据库,在查询的时候是不允许进行关联查询(除去系统提供的查询方式),这时候只能进行一张表一张表的操作。

上图便是数据库中的部分表。

data表:记录了用户的通讯录所有数据,包括手机号,显示名称等,但是里面的mimetype_id表示不同的数据类型。这与表mimetypes表中的_id相对应。raw_contact_id与下面的raw_contacts表中的_id相对应


mimetypes表:

在mimetype表中,我们注意_id = 5和11,稍后会使用

groups表,此表记录的是通讯录中的分组,其中account_name标识了这个分组属于那个用户。因为使用的同事的小米,所以其中一个账户是xiaomi。如果用其他手机,里面应该会是com.google的分组。在字段中有一个group_visible标识了当前组是否可见(0表示可见,1表示隐藏):

raw_contacts表中,有一个字段是contact_id,接下来会与下面的contacts表中的_id相关联。


contacts表,这个表中的name_raw_contact_id就与上面的raw_contacts表中的_id相对应。


上面是对5张表的简单概括,那么接下来将是如何去获取用户的手机号和名称。

如果自己观察data表和raw_contacts表,会发现,通讯录中显示的手机号存放在data表中,而对应的用户显示名称却是在raw_contacts中,所以当我们要去获取手机号对应的用户显示名称的时候,我们还需要去查看raw_contacts表中的值,这个中间对应的桥梁就是data表中raw_contact_id;

原创粉丝点击