Android通讯录查询篇--ContactsContract.Data 二
上次说Data.MIMETYPE这个玩意很重要,官方的文档中描述了一大段的话。里面比较重要的几点是:
1、在Data中有一大段的公共数据段,DATA1~DATA15。这名子咋一看,真搞笑,哪有这样为数据命名的,神也记不住是干什么的的啊!
2、上面说的那些公共数据段所存的数据类型是由这个MIMETYPE决定的。
虽说这两个重要,不过刚看到这里,我还是懵了,这到底是个什么玩意嘛。(当然这很有可能是因为英文水平差,没看完全懂的原因。)
再看看官方文档,上面有个例子说,如果MIMETYPE的值是Phone.CONTENT_ITEM_TYPE,则DATA1就是电话号码,如果MIMETYPE的值是Email.CONTENT_ITEM_TYPE则DATA1的值就是E-mail地址。这样一说,又似乎明白了点。(还是举实例子来的实在!)
在上次说的那个官方代码里面不就有将MIMETYPE赋值为Phone.CONTENT_ITEM_TYPE的么。所以那个查询就用来查电话了。
在MIMETYPE的描述里面说,它可以被赋许多值:
StructuredName.CONTENT_ITEM_TYPE
Phone.CONTENT_ITEM_TYPE
Email.CONTENT_ITEM_TYPE
Photo.CONTENT_ITEM_TYPE
Organization.CONTENT_ITEM_TYPE
Im.CONTENT_ITEM_TYPE
Nickname.CONTENT_ITEM_TYPE
Note.CONTENT_ITEM_TYPE
StructuredPostal.CONTENT_ITEM_TYPE
GroupMembership.CONTENT_ITEM_TYPE
Website.CONTENT_ITEM_TYPE
Event.CONTENT_ITEM_TYPE
Relation.CONTENT_ITEM_TYPE
现在我们知道的有用Phone那个可以查电话,那用哪个查姓名呢?
再之后看文档时候可以明白把StructuredName.CONTENT_ITEM_TYPE给MINETYPE就行了。(但刚开始的时候可能是因为看英文,怎么都没把它们好的联系起来。)
所将官方的代码改成这样的话就可以查询姓名了。
1 |
Cursor c = getContentResolver().query(Data.CONTENT_URI, |
2 |
new String[]{Data._ID,StructuredName.DISPLAY_NAME, }, |
3 |
Data.MIMETYPE + "='" + StructuredName.CONTENT_ITEM_TYPE + "'" , |
4 |
null , null ); |
其中游标C的结果的第二个字段(StructuredName.DISPLAY_NAME)就是姓名,准确的说应该是“显示姓名”(因为姓名也以再细分为姓和名)。
如果还没有理解的话,也不要紧,之后我会把它讲的形像一点。
通讯录虽然不是一个什么难的东西,不过我想还是理顺一点好,免得过些天后又晕了。。