技术:Android联系人数据库分析
知识点:分析联系人中Email和Nickname数据。
重点:数据类型
要操作Email数据,先看看系统提供了Email哪些类型,从模拟器上看数据图:
Email数据有五种类型。
接着从源码查看Android对不同类型的定义:
public static final int TYPE_HOME = 1; public static final int TYPE_WORK = 2; public static final int TYPE_OTHER = 3; public static final int TYPE_MOBILE = 4;
怎么只有四种类型???
当然,还有一种自定义类型,稍后分析。
Email主要数据:
类型:ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE
操作的数据类型:
ContactsContract.CommonDataKinds.Email.ADDRESS 对应Data.data1:表示email地址。
ContactsContract.CommonDataKinds.Email.TYPE 对应Data.data2:表示email类型。
ContactsContract.CommonDataKinds.Email.LABEL它对应Data.data3:表示自定义类型
当type为多少时,能取自定义类型数据?
根据操作数据经验,一般自定义类型,若没有定义,一般用0或-1去表示。
接着用这两个数据测试:
当type=0时,能够得到自定义类型的名称。
当type=-1时,自定义类型名称为Unknown。
以上是对Email数据的操作,比较简单。最注意的点是:对自定义数据类型的操作。
下面是对Nickname数据操作。
这个字段比较简单,一般的手机,一个联系人只有一个nickname。所以,没有特别难的地方。
一般如下图操作:
基本只有一条。
Nickname主要数据:
类型:ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE
Nickname.NAME:对应Data.data1。表示输入的名称。
但在源码中,还发现有类型?它的作用是什么还不知,看看源码:
public static final int TYPE_DEFAULT = 1; public static final int TYPE_OTHER_NAME = 2; public static final int TYPE_MAIDEN_NAME = 3; /** @deprecated Use TYPE_MAIDEN_NAME instead. */ @Deprecated public static final int TYPE_MAINDEN_NAME = 3; public static final int TYPE_SHORT_NAME = 4; public static final int TYPE_INITIALS = 5;
如果有谁知道此类型的作用,还请告知,谢谢!!!
这个字段是不是so easy!!!
最近,看存入到数据库中的数据,还是用事实说话:
可以证明:Email的type为0时,是自定义类型。但为-1的数据,是没法手动添加,只能由代码操作,这里就不展示了,感兴趣的朋友,可以自己去测试。
但从保存的结果要注意:Email可以插入同类型的数据。但在数据库中是不能区分。所以,要操作这个字段时,注意更新操作(可能把两条更新成两条一样的)。
但,这只是提醒,可能不同的真实手机,会不一样。所以,需要测试。用数据说话,才是王道。
这两个字段,就分析到这里。如果有什么不正确的地方,欢迎指正,共同学习,共同进步!!!稍后,会继续分析联络人的其它字段!!!
源码等分析完其它字段后,再发上来吧,感谢大家的关注!!!