技术:android联系人数据库分析
知识点:分析联系人中phone和organization数据。
重点:数据类型
联系人数据库中,最重要的当然是手机号字段。接下来仔细分析该字段了。
先看android提供了多少种类型:下面是从模拟器中截的类型图:

看到这么多截图,就知道一个手机字段的类型有多少了吧。总共21种类型(实际真实的手机中,当然不会有这么全)。
来看系统源码中对类型的定义:
怎么只有20种类型,难道我数错了???
这怎么可能 ,当然不会少了,还有一个数据就是类型为0的自定义的数据。
接下来,分析phone中,最重要的几个字段数据:
类型:contactscontract.commondatakinds.phone.content_item_type
phone.number:对应data.data1:表示手机数据,如:13810000000
phone.type:对应data.data2:表示手机类型。注意:为0时,为自定义类型。
phone.label:对应data.data3:表示自定义类型的名称(只有type为0时,才有此值)。
分析起来,还是比较简单。基本没有太在的难度。
接下来分析organization字段:
先也看看系统提供了多少种类型:
看图:
类型只有这三种。
看看源码对类型的定义:
又缺少了自定义类型。看来自定义类型是单独定义了。
接着看模拟器中的organization数据操作:
难道中有这两个字段?
当然不是,不知模拟器中会这么简单。
还是看源码中,定义了哪些可操作的数据吧:
原来还有这么多数据可以操作。我们就来分析这些字段吧:
类型: contactscontract.commondatakinds.organization.content_item_type
organization.company:对应data.data1:表示:公司/组织
organization.type:对应data.data2:表示类型,就是上面的三种类型
organization.label:对应data.data3:表示自定义类型名称
organization.title:对应data.data4:表示标题
organization.department:对应data.data5:表示部门
organization.office_location:对应data.data9:表示办公位置
其它的data6、7、9、10:表示是什么呢?在不同的手机,代表可能会有差异的。
这些字段,也比较简单,后面来看看从模拟器中导入出的数据库吧:
这个时候,发现了什么?phone字段的data4有数据了,这是代表什么数据呢?
先看源码它代表什么:
这个是什么?看上面的注释:明白e164就知道了:
通过度娘查询到的解释:
一个e.164号码由以下几个部分组成,不同部分之间可以用“-”、“.”或空格等连接:
enum+国家码(1~3位数字)-地区码(n位数字)-电话号码(15-n位数字)。
例如:北京的一个电话号码写成标准的e.164格式应是:+86-10-62618501
不明白的看百科的解释:http://baike.baidu.com/view/827326.htm
说白了,只是一种标准。
再看一下存入的数据图:
data1:存入的是号码。但有些手机会有一些分隔符。但data4:是反过来的数据。
但要注意:两条同类型的数据,是没有字段作区分。
所以,操作更新的时候要注意了。。。
写到这里,基本完成。欢迎一起和大家学习交流!!!
等到最后分析完成,再上传源码。。。感谢大家的关注!!!