今天看了一下 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. Bootstrap tab插件的使用

    菜鸟教程链接:http://www.runoob.com/bootstrap/bootstrap-tab-plugin.html 1.例子 <!DOCTYPE html> <html ...

  2. 网站遭受CC攻击的解决办法

    前两天,网站的注册发送手机短信验证码的接口受到攻击,一个半小时,1万条短信都发出去了.可见,我们的安全防护做的多么不好. 分析攻击方式: 1) 多台机器模拟人工操作,随机输入手机号,就点击发送短信: ...

  3. Java中的守护线程——daemon

    絮叨 Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 定义:守护线程(aka:服务线程),在没有用户线程可服务时会自动离开. 优先级:守护线程的优先级 ...

  4. 【UE4】VR模式下全屏(去掉两侧的黑边)

    1.下载UE4源码,用Visual Studio打开源码找到指定文件,修改代码后重新编译得到一个新的UE4编辑器 2.将游戏项目在新的UE4中打开,重新编译. 参考: https://caedmom. ...

  5. ctags简易用法

    vim + ctags a 首先我们必需给要阅读的原始码建一个或多个tags文件, 在shell下利用ctags命令给单个文件建立tags如下: $ ctags filename.c 要给同一个目录下 ...

  6. Android——indexof()

    Java中字符串中子串的查找共有四种方法(indexof()) Java中字符串中子串的查找共有四种方法,如下:1.int indexOf(String str) :返回第一次出现的指定子字符串在此字 ...

  7. 输//ip提示找不到应用程序

    输//ip提示找不到应用程序??? (未测试)试试:环境变量的 PATH 中添加 C:\Windows\system32 (未测试)试试:默认程序里----协议关联里:管理ie

  8. sql分页存储过程比较

    一,先创建一百万条数据 drop table #tmp create table #tmp ( id ,) primary key, name ) ) declare @i int begin ins ...

  9. sqoop 常用命令整理(二)

    26.Validate 它用来比较源数据和目标数据的数量 它有三个接口 Validator. 它有三个接口 Validator. Property: validator Description: Dr ...

  10. 【jquery】ajax 请求成功后新开窗口被拦截解决方法

    问题: 前面开发项目时碰到一个问题,ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是很可惜被浏览器给拦截了,怎么解决这个问题呢? 分析: 浏览器之所以 ...