天天看点

[android研究联系人之三]联系人Phone/Organization数据操作

技术:android联系人数据库分析

知识点:分析联系人中phone和organization数据。

重点:数据类型

联系人数据库中,最重要的当然是手机号字段。接下来仔细分析该字段了。

先看android提供了多少种类型:下面是从模拟器中截的类型图:

[android研究联系人之三]联系人Phone/Organization数据操作
[android研究联系人之三]联系人Phone/Organization数据操作
[android研究联系人之三]联系人Phone/Organization数据操作
[android研究联系人之三]联系人Phone/Organization数据操作

看到这么多截图,就知道一个手机字段的类型有多少了吧。总共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字段:

先也看看系统提供了多少种类型:

看图:

[android研究联系人之三]联系人Phone/Organization数据操作

类型只有这三种。

看看源码对类型的定义:

又缺少了自定义类型。看来自定义类型是单独定义了。

接着看模拟器中的organization数据操作:

[android研究联系人之三]联系人Phone/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:表示是什么呢?在不同的手机,代表可能会有差异的。

这些字段,也比较简单,后面来看看从模拟器中导入出的数据库吧:

[android研究联系人之三]联系人Phone/Organization数据操作

这个时候,发现了什么?phone字段的data4有数据了,这是代表什么数据呢?

先看源码它代表什么:

这个是什么?看上面的注释:明白e164就知道了:

通过度娘查询到的解释:

一个e.164号码由以下几个部分组成,不同部分之间可以用“-”、“.”或空格等连接:

  enum+国家码(1~3位数字)-地区码(n位数字)-电话号码(15-n位数字)。

  例如:北京的一个电话号码写成标准的e.164格式应是:+86-10-62618501

不明白的看百科的解释:http://baike.baidu.com/view/827326.htm

说白了,只是一种标准。

再看一下存入的数据图:

[android研究联系人之三]联系人Phone/Organization数据操作

data1:存入的是号码。但有些手机会有一些分隔符。但data4:是反过来的数据。

但要注意:两条同类型的数据,是没有字段作区分。

                  所以,操作更新的时候要注意了。。。

写到这里,基本完成。欢迎一起和大家学习交流!!!

等到最后分析完成,再上传源码。。。感谢大家的关注!!!