今天看了一下 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. 使用jquery的$.ajax向服务端传递中文,避免乱码的解决办法!

    在js里,对中文使用下面的方法 encodeURIComponent(var) 函数 就ok了!

  2. 改改"坏"代码

    程序猿很多时候费了九牛二虎之力使用各种黑科技实现了某个功能,终于可以交差,但整个过程就像个噩梦,一般人是不太愿意回过头去阅读自己写的代码的,交出去的代码就让它如往事般随风吧. 可你不愿读自己的代码,却 ...

  3. 树莓派3B+首次登陆通过网络

    树莓派3B+默认串口不能登录,即使可使用可需要通过连线方式连接,如何才能直接通过网络ssh登录树莓派呢? 串口问题及使用 树莓派3的UART串口的使用问题,该串口问题的官方反馈及回复请参考这两篇官方博 ...

  4. Java编程的逻辑 (41) - 剖析HashSet

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  5. Kafka分区数与消费者个数

    Kafka的分区数是不是越多越好? 分区多的优点 kafka使用分区将topic的消息打散到多个分区分布保存在不同的broker上,实现了producer和consumer消息处理的高吞吐量.Kafk ...

  6. [数据结构]最大流之Ford-Fulkerson算法

    本文主要讲解最大流问题的Ford-Fulkerson解法.可以说这是一种方法,而不是算法,因为它包含具有不同运行时间的几种实现.该方法依赖于三种重要思想:残留网络,增广路径和割. 在介绍着三种概念之前 ...

  7. kafka中的消费组

    一直以来都想写一点关于kafka consumer的东西,特别是关于新版consumer的中文资料很少.最近Kafka社区邮件组已经在讨论是否应该正式使用新版本consumer替换老版本,笔者也觉得时 ...

  8. centos7添加bridge-nf-call-ip6tables出现No such file or directory

    在/etc/sysctl.conf中添加: net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 ...

  9. JDBC-批处理操作

    javaweb学习总结(三十六)——使用JDBC进行批处理 在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效 ...

  10. 微信小程序——自定义导航栏

    微信头部导航栏可能通过json配置: 但是有时候我们项目需求可能需要自定义头部导航栏,如下图所示: 现在具体说一下实现步骤及方法: 步骤: 1.在 app.json 里面把 "navigat ...