码迷,mamicode.com
首页 > 移动开发 > 详细

Android手机通讯录项目开发--联系人数据库contacts2.db介绍

时间:2015-08-13 22:32:50      阅读:686      评论:0      收藏:0      [点我收藏+]

标签:

项目描述:该项目为基于Android平台的手机通讯录,主要模块分为四个部分:联系人管理模块,通话记录管理模块,短信管理模块,系统设置模块。

系统结构图如下:

技术分享

本项目启动时间:2014年5月28日

说明:本次开发项目的所有源码全部会分享给大家。开发此项目的目的有这几点:一、锻炼独立开发项目的能力,二、增加对Android开发的了解,三、熟悉Android通讯录机制。


闲话不多说,正式开始!


技术要点一:熟悉Android联系人数据库contacts2.db

1.获得联系人数据库contacts2.db文件

步骤一、打开Eclipse并且运行模拟器;

步骤二、调出文件浏览器File Explorer(从工具栏中依次打开Windows—>Show View -> Other -> Android - > File Explorer),如图所示:

技术分享

步骤三、打开文件浏览器,并在此目录data->data->com.android.providers.contacts->databases下,找到数据库:contacts2.db,注意:如果是想导出真机上的contacts2.db数据库,真机必须是经过root以后才能导出,否则在data目录层就打不开。

技术分享

步骤四、选中contacts2.db,并且在File Explorer的右上角,选择导出键,将contacts2.db数据库导入到电脑上。

技术分享

步骤五、下载数据库可视化软件,用来帮我们打开contacts2.db,查看其中的表结构,这里我推荐使用sqlitestudio,附上下载链接:链接地址

步骤六、安装sqlitestudio,安装成功后,打开软件并导入contacts2.db数据库

技术分享

步骤七、双击Contacts2数据库,就能看到Contacts2.db里面所有的表

技术分享

步骤九、双击data表,查看表的结构

技术分享

步骤十、点击工具栏上方的数据,就可以查看表中的内容

技术分享


2.介绍contacts2.db数据库

有关通讯录的资料都放在contacts2.db中这个数据库中,本次项目开发主要使用到的表分别如下:


contacts表

Contacts表是对raw contact表按照account type和account name进行的聚合,Contacts表的聚合逻辑在ContactAggregator.java文件中。

结构图如下:

技术分享

数据图如下:

技术分享


raw_contacts表

raw_contacts表描述了联系人每个账户下的数据,根据账户名和账户类型字段进行区分。即同一个联系人可能在raw_contact表中有多个记录,每个记录分属于不同的账户。所以一个contact_id可能对应多个raw_contact id,为什么一个contact_id会对应多个raw_contact_id,相信读者看到这里就会知道该问题的答案了。从这里我们也发现android是允许一个联系人绑定多个账户的。

需要注意的字段为ACCOUNT_NAME,ACCOUNT_TYPE,DELETED、VERSION。

ACCOUNT_NAME和ACOUNT_TYPE我就不详细描述了,DELETED标志位的作用是,当删除一条用户记录时,可以暂时再内部维护一条删除状态的记录,待该账户的server端删除完毕后,再从本地删除,其实用户可以不必关心该字段的内部机制,只需要注意在查询raw contact表时,可以根据DELETED字段过滤掉已删除的记录。VERSION字段也是一个很有用的字段,可以根据该字段来确定联系人信息是否发生变化,如果您本地保存了联系人信息,那么就可以根据VERSION信息来和系统数据库的联系人信息进行比较,来确定是否需要做UPDATE操作。

结构图如下:

技术分享

数据图如下(两张图合并起来):

技术分享


技术分享


data表

data表存储了联系人的具体信息,比如电话、email等信息,从下面的图我们可以看书每个raw contact表中的记录会对应多个data信息,这不难理解,一个联系人可能有多个电话号码,多个email,这些信息是如何存储在data表中的呢?其实不难解决这个问题,定义一个专门的描述字段用来定义该记录的类型,即MIME TYPE,然后根据MIME TYPE来区分该记录的类型,然后每种信息都会有一个自己的类型。

结构图如下:

技术分享

数据如下(两张图合并起来):

技术分享


技术分享


calls表

calls表主要作用是用来存放通话记录,主要使用到这些字段date(日期),number(电话号码),type(通话记录类型),name(联系人姓名)。

结构图如下:

技术分享

数据图如下(两张图合并起来):

技术分享


技术分享


其中以上表中,contacts表,raw_contacts表,data表之间的关系如下图所示:

技术分享

这三张表是联系人数据库的最主要的数据表,其他的数据只是提供一些辅助功能,我们先详细介绍这三张表的结构和使用方法。

从上图我们可以看书contacts表和raw_contact表是一对多的关系,contacts表是对raw_contact表记录的聚合,即contacts表中是没有账户(Account)的概念的,而raw_contact表是联系人特定账户的的概要信息,Data表则存储了联系人的详细信息,比如email、电话号码等。

Android手机通讯录项目开发--联系人数据库contacts2.db介绍

标签:

原文地址:http://my.oschina.net/gabriel1215/blog/492051

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!