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

项目描述:该项目为基于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、电话号码等。

时间: 2025-01-13 03:55:57

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

Android手机通讯录解析

相关图片上传麻烦,原文件到我的博客上传的文件里下载. 1.通讯录应用介绍 通讯录应用是Android自带的应用程序,我们看到此应用的时候,可能只认为这是一个应用,用数据库存储数据,但是实际上不是这样的. 通讯录是ContentProvider的应用,通讯录由两部分组成: (1)com.android.providers.contacts的ContentProvider:真正存储数据的ContentProvider (2)com.android.contacts:运用ContentResolver

Android手机通讯录备份还原代码

实现方法很简单1.把通讯录中的联系人,电话号码保存到txt文件中完成备份.2.读取txt文件,导入到通讯录完成还原. 具体代码1.添加 通讯录读写权限,存储卡写权限 <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission><uses-permission android:name="android.permission.WRITE_EXT

Android手机嵌入式驱动开发课程教程

本文介绍两种Golang的开发环境一种基于notepad++.另一种基于liteide. 1.下载Golang语言的pkg:http://golangtc.com/download 直接点击安装,一路next. 2.程序员必备神器notepad++开发Golang环境很简单 一次点击:插件->Plugin Manger->Show Plugin Manger,安装插件GOnpp,重启notepad++. 新建文件命名为hello.go用notepad++打开,拷贝如下代码: package m

Expo大作战--针对已经开发过react native项目开发人员有针对性的介绍了expo,expo的局限性,开发时项目选型注意点等

简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo依赖,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人修改补充+demo测试的形式,对expo进行一次大补血!欢迎加入expo兴趣学习交流群:597732981 [之前我写过一些列关于expo和rn入门配置的东i西,大家可以点击这里查看:从零学习rn开发] 相关文章: Expo大作战--什么是expo,如何安装expo clinet和xde,xde如何

Android UI(五)云通讯录项目之联系人列表,带侧滑选择,带搜索框

作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节.交流QQ群:[编程之美 365234583]http://jq.qq.com/?_wv=1027&k=XVfBTo 要捐钱的就打支付宝吧:13958686678(泥瓦匠开个玩笑~) 一.前言 继续AndroidUI系列,泥瓦匠又要开始扯淡了.哈哈今天在文章头加了个支付宝账号.我也真逗,至今没收到一笔是写博客的钱.或是分享的.泥瓦匠也就挂着逗逗乐

Android手机通讯录

1.概述 最近由于项目需求,需要做一个查看手机通讯录,并且取出相应的数据.类似于下图: 用到的一个主要的知识点:SectionIndexer--能够有效地帮助我们对分组进行控制,由于SectionIndexer是一个接口,你可以自定义一个子类来实现SectionIndexer, 不过自己再写一个SectionIndexer的实现太麻烦了,这里我们直接使用Android提供好 的实现AlphabetIndexer,用它来实现联系人分组功能已经足够了.AlphabetIndexer的构造函数需要传入

Android手机记账应用开发视频教程

基于Android平台的手机记账应用开发全程实录(Activity间数据传递.SQLiteDatabase.AsyncTask)课程分类:Android适合人群:中级课时数量:26课时用到技术:AsyncTask.drawable.SQLite.selector.layout涉及项目:基于Android平台的手机记账应用咨询QQ:18402155921.课程研发环境开发工具:Eclipse 4.22.内容简介本课程内容详细介绍了手机记账软件的开发过程,从应用的需求出发,以目前应用市场上比较成熟的

如何从android手机中把自己的数据库给COPY出来

============问题描述============ 自己写个APK,安装在android手机,程序运行时会创建一个SQLITE的数据库: 用eclipse,可以看到数据库的位置,我把手机插入电脑,打USB连接后,却不能在手机中找到数据库文件(APK绝对是安装在SD卡上的),有人说要有ROOT的权限.不知如何实现,如果要写一个程序来实现,请高手指点思想,列出相关重点函数,谢谢 ============解决方案1============ 自己的应用复制自己的数据库,无需root,直接文件复制就

android手机虚拟按钮开发问题点

最近做了手机虚拟按钮开发,和华为荣耀的虚拟按钮类似,效果如下(屏幕底下部分): 功能描述:手机开机,"虚拟按钮"自动隐藏,当从手机下边沿往上滑动时候,就自动出现! 没有操作的话,3秒就自动消失. 要实现这个功能需要解决这几个问题:(1)如何让其在手机开机的时候启动;(2)如何能在任何界面都能够响应手机使用者需要"虚拟按钮"的意图,并且弹出"虚拟按钮";(3)如何检测使用者从手机下边沿往上滑动的事件;(4)如何模拟真实的home_key, menu