今天看了一下 android手机内的通讯录数据库,简单的汇总了一下。

数据库见附件中的contacts2.db , 里面一共有40个表,34个视图,很庞大,挑几个重点的看一下。

1.表Raw_contacts

假定设备上有2个账户:

· Neroseagate3@gmail.com

· Neroseagate@gmail.com

这两个账户里面都有 联系人“GG”,导出的数据如下

注意头两列,第一列将会和下面的表关联,第二列关联Account

第一个 [酷派客服热线]是手机自带的。

中间两条是同步下来的。

最后一个是从手机上添加的。

这个表的作用 就是存储原生数据以及同步的配置项。

2.Data 表

详细的数据存放在data中,用主键关联raw_Data。

注意 raw_contact_id 是用来关联上一个表的, mimeType_id 是指不同的数据类型,data1-data15是用来存储数据的

_id

package_id

mimetype_id

raw_contact_id

is_read_only

is_primary

is_super_primary

data_version

data1

data2

data3

data4

data5

data6

data7

data8

data9

data10

data11

data12

data13

data14

data15

data_sync1

23

 

7

5

0

0

0

0

                             

https://www.google.com/m8/feeds/photos/media/neroseagate3%40gmail.com/1a6e03a18abfdb19

24

 

6

5

0

0

0

1

GG

GG

             

1

3

         

25

 

11

5

0

0

0

1

                               

26

 

10

5

0

0

0

1

                               

27

 

15

5

0

0

0

1

             

4

5

             

29

 

8

5

0

0

0

1

5

                             

30

 

5

5

0

0

0

1

13372576188

2

 

8.6134E+12

                       

31

 

16

5

0

0

0

1

www.cnblogs.com

3

                           

32

 

17

5

0

0

0

0

1972/12/18

3

                           

33

 

2

5

0

1

0

1

home@1.com

1

                           

34

 

8

5

0

0

0

0

6

                             

35

 

4

5

0

0

0

0

江西,中囿

1

         

江西_

 

中国

           

MimeType 的值如下:

_id

mimetype

1

vnd.android.cursor.item/cpother

2

vnd.android.cursor.item/email_v2

3

vnd.android.cursor.item/im

4

vnd.android.cursor.item/postal-address_v2

5

vnd.android.cursor.item/phone_v2

6

vnd.android.cursor.item/name

7

vnd.android.cursor.item/photo

8

vnd.android.cursor.item/group_membership

9

vnd.android.cursor.item/organization

10

vnd.android.cursor.item/nickname

11

vnd.android.cursor.item/note

12

vnd.android.cursor.item/sns

13

vnd.android.cursor.item/sip_address

14

vnd.android.cursor.item/identity

15

vnd.com.google.cursor.item/contact_misc

16

vnd.android.cursor.item/website

17

vnd.android.cursor.item/contact_event

另外data1-data15 有不同的用途

名字:

Uri: Uri.parse("content://com.android.contacts/data")

PREFIX = "data4"; //名称前缀
MID_NAME = "data5";//中间名
GIVEN_NAME = "data2";//名字
FAMILY_NAME = "data3";//姓氏
MID_PINYIN="data8"; //中间名拼音
String FAMILY_NAME_PINYIN="data9"; //姓氏拼音
String SUFIX = "data6"; //名称后缀
String SUFIX_PINYIN="data7"; //名字拼音

电话:

Uri: Uri.parse("content://com.android.contacts/data/phones"

phone: "data1";//号码

Type: "data2";//这个字段是整形值,指示电话类型

类型对应关系如下:

TYPE_CUSTOM = 0;
TYPE_HOME = 1;
TYPE_MOBILE = 2;
TYPE_WORK = 3;
TYPE_FAX_WORK = 4;
TYPE_FAX_HOME = 5;
TYPE_PAGER = 6;
TYPE_OTHER = 7;

Email

Uri:Uri.parse("content://com.android.contacts/data/emails")

Email: "data1";//邮箱地址

Type: "data2";//这个字段是整形值,指示Email类型

类型对应关系如下:

TYPE_CUSTOM = 0;
TYPE_HOME = 1;
TYPE_WORK = 2;
TYPE_OTHER = 3;
TYPE_MOBILE = 4;

地址:

Uri:Uri.parse("content://com.android.contacts/data/postals")

STREET="data4";//街道
CITY="data8";//城市
STATE="data7";//州
ZIP_CODE="data9";//邮政编码

Type:"data2";//type的类型如下

TYPE_CUSTOM = 0;
TYPE_HOME = 1;
TYPE_WORK = 2;
TYPE_OTHER = 3;

3.表Contacts

这张表,按照google的意思,合并raw_contacts里面的同名联系人,如下图所示,

可是,我看到的并不是这样子, 对比第一个表,貌似没有合并,只是一个简单的汇总信息表。

_id

name_raw_contact_id

default_tel

single_is_secret

photo_index

send_to_voicemail_vt

send_to_voicemail_sip

indicate_phone_or_sim_contact

index_in_sim

filter

is_sdn_contact

1

1

76923075280

0

5

0

0

-1

-1

0

0

3

5

13372576188

0

4

0

0

-1

-1

0

0

6

6

15906879563

0

7

0

0

-1

-1

0

0

7

7

133

0

6

0

0

-1

-1

0

0

参考资料

http://developer.android.com/guide/topics/providers/contacts-provider.html

http://blog.csdn.net/xys289187120/article/details/6730957

http://www.cnblogs.com/lw900320/archive/2013/01/10/2855145.html

附件( http://files.cnblogs.com/xiaokang088/db.zip)是 从手机里面提取出来的数据库和 转化的excel。

android手机内的通讯录数据库的更多相关文章

  1. 判断在Android手机内, 页面重新刷新一次

    <script type="text/javascript"> var UA = navigator.userAgent.toLowerCase(); //androi ...

  2. 用FileExplorer查看android手机中的数据库

    想查看一下手机中的通讯录数据库,google之后找到了办法. 参考: http://stackoverflow.com/questions/4867379/android-eclipse-ddms-c ...

  3. [转]设置Android手机以使用ARM Streamline进行性能分析(一)

    本博客第一次转载的文章,原文访问不到了,这篇是从google cache里挖出来的,为有需要的同学准备.原文地址     Posted by Fang Bao,(鲍方) 4 Comments 11 J ...

  4. Android开发环境下关于如何导出手机通讯录数据库【Written By KillerLegend】

    首先度Linux中的权限(Permissions)进行一些说明: permissions一共有10个符号位,[- --- --- ---],在这里我们从左至右由0开始编号,各个符号位的编号分别为0,1 ...

  5. Android 操作手机内置存储卡中的文件

    场景:需要读取指定文件的内容,此文件是手动存储到手机内置存储卡中的,且手机上不存在SD卡. 对于android通过activity提供的openFileOutput和openFileInput可以直接 ...

  6. 如何使用 sqlite3 访问 Android 手机的数据库

    如何设置Android手机的sqlite3命令环境 http://www.cnblogs.com/linjiqin/archive/2011/11/28/2266619.html SQLite3 为a ...

  7. 腾讯优测干货精选|Android双卡双待适配——隐藏在数据库中的那些秘密

    腾讯优测是专业的app自动化测试平台,除了提供兼容性测试,远程真机租用等多维度的测试服务,还有优分享-腾讯内部的移动研发测试干货精选~ 许多APP都希望获取用户通讯录联系人,利用通讯录关系链信息来丰富 ...

  8. 将Android手机打造成你的Python开发者桌面#华为云·寻找黑马程序员#

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  9. Android获取内置sdcard跟外置sdcard路径

    Android获取内置sdcard跟外置sdcard路径.(测试过两个手机,亲测可用) 1.先得到外置sdcard路径,这个接口是系统提供的标准接口. 2.得到上一级文件夹目录 3.得到该目录的所有文 ...

随机推荐

  1. C语言 · 选最大数

    算法提高 选最大数   时间限制:1.0s   内存限制:512.0MB      输入3个整数a.b.c,(数的范围是[1,10000])输出其中最大的数.(用指针实现) 样例输入 2 5 1 样例 ...

  2. Java通过JDBC进行简单的增删改查(以MySQL为例)

    Java通过JDBC进行简单的增删改查(以MySQL为例) 目录: 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JD ...

  3. MySQL优化之——安全地关闭MySQL实例

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46812371 关闭过程: 1.发起shutdown,发出  SIGTERM信号 2 ...

  4. tf变换(1)

    TF库的目的是实现系统中任一个点在所有坐标系之间的坐标变换,也就是说,只要给定一个坐标系下的一个点的坐标,就能获得这个点在其他坐标系的坐标. 使用tf功能包,a. 监听tf变换: 接收并缓存系统中发布 ...

  5. oracle分页查询原理浅析

    原因一 oracle默认为每个表生成rowmun,rowid字段,这些字段我们称之为伪列 1 创建测试表 CREATE TABLE TEST( ID NUMBER, NAME VARCHAR2(20) ...

  6. h5预加载代码

    预加载 <!--预加载--> <div class="preload"> <div class="prezoom"> < ...

  7. 分治算法--寻找第k大数

    问题描述:给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k大的元素,(这里给定的线性集是无序的). 其实这个问题很简单,直接对线性序列集qsort,再找出第k个即可.但是这样的 ...

  8. 定义与声明、头文件与extern总结

     用#include可以包含其他头文件中变量.函数的声明,为什么还要extern关键字? 如果我想引用一个全局变量或函数a,我只要直接在源文件中包含#include<xxx.h> (xxx ...

  9. Qt网络编程QTcpServer和QTcpSocket的理解

    前一段时间通过调试Qt源码,大致了解了Qt的事件机制.信号槽机制.毕竟能力和时间有限.有些地方理解的并不是很清楚. 开发环境:Linux((fedora 17),Qt版本(qt-everywhere- ...

  10. easy-ui 使用总结

    1.datagrid 2次加载问题: 解决方案:<table id="DataGrid" class="easyui-datagrid"> 改为 & ...