2013年3月13日 星期三

Android通讯录查询篇--ContactsContract.Data

官方的文档中描述了一大段的话。里面比较重要的几点是:
      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
2
3
4
Cursor c = getContentResolver().query(Data.CONTENT_URI,
        new String[]{Data._ID,StructuredName.DISPLAY_NAME, },
        Data.MIMETYPE + "='" + StructuredName.CONTENT_ITEM_TYPE + "'",
          null, null);

  其中游标C的结果的第二个字段(StructuredName.DISPLAY_NAME)就是姓名,准确的说应该是“显示姓名”(因为姓名也以再细分为姓和名)。

沒有留言:

張貼留言