Pro Android学习笔记(一六三):联系人API(6):联系人详细信息

文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处http://blog.csdn.net/flowingflying/以及作者@恺风Wei。

在前面我们学习过,数据库中有raw_contacts表并没有存放联系人的所有信息,而是在data表中存放的,例如具体的电话号码,电子邮件等等。数据库给出视图view_entities,合并raw_contacts和data,以便可以从中获取某个raw contact的全部的详细信息。下面的小例子将演示如果通过ContactsContract.RawContactsEntity.CONTENT_URI来读取详细信息。

Raw Contacts Entity提供的信息

代码和之前获取整合联系人以及raw contact的表头信息类似,只是URI不同,Raw contacts的URI为ContactsContract.RawContactsEntity.CONTENT_URI。代码不再给出,输入结果为:

Pro Android学习笔记(一六三):联系人API(6):联系人详细信息_第1张图片

显示某个整合ID或raw contact的详细信息

我们在下面的小例子中读取整合ID为1和2的raw contact的信息。在我的华为手机中,这个raw contact分别为国际漫游服务和华为客服,相关信息如下:

Pro Android学习笔记(一六三):联系人API(6):联系人详细信息_第2张图片

和之前的小例子一样,构造一个类来存放这些entity的信息,我们选取了部分内容。注意到部分的信息的列名称采用了ContactsContract.RawContacts,而非ContactsContract.RawContactsEntity,这是因为RawContactsEntity的内容来自data表,而所读取的视图view_entities信息比data表的要多,部分列名字来着RawContacts。

public class ContactInfo {
    public String rawContactId;
    public String aggregatedContactId;
    public String dataId;
    public String accountName;
    public String accountType;
    public String mimetype;
    public String data1;
    
    public void fillinFrom(Cursor c){
        rawContactId = BaseTest.getColumnValue(c,"_ID");
        accountName = BaseTest.getColumnValue(c,ContactsContract.RawContacts.ACCOUNT_NAME);
        accountType = BaseTest.getColumnValue(c,ContactsContract.RawContacts.ACCOUNT_TYPE);
        aggregatedContactId = BaseTest.getColumnValue(c,ContactsContract.RawContacts.CONTACT_ID);
        mimetype = BaseTest.getColumnValue(c,ContactsContract.RawContactsEntity.MIMETYPE);
        data1 = BaseTest.getColumnValue(c,ContactsContract.RawContactsEntity.DATA1);
        dataId = BaseTest.getColumnValue(c,ContactsContract.RawContactsEntity.DATA_ID);

    }
   
    public String toString()
    {
        return data1 + "/" + mimetype
            + "/" + accountName + ":" + accountType
            + "/" + dataId + "/" + rawContactId  + "/" + aggregatedContactId;
    }

}

下面是读取的代码:

private void showSomeEntries(int id1, int id2){
    Cursor c = null;
    try{
        c = getACurosor(ContactsContract.RawContactsEntity.CONTENT_URI.toString(),
                "contact_id in ("+ id1 + ","+ id2 +")"); //设定了SQL的where条件,这里给出2个整合ID的信息,如果是raw contact的ID,对应的就是_id。
        if(c != null){
            showEntries(c);
        }
    }finally{
        if(c!= null)
            c.close();
    }           
}

private void showEntries(Cursor c ){
    int num = 0;
    for(c.moveToFirst(); !c.isAfterLast() ; num ++,c.moveToNext()){
        ContactInfo one = new ContactInfo();
        one.fillinFrom(c);
        showInfo("【" + num + "】" + one.toString());
    }
}

private Cursor getACurosor(String uri, String clause){
    ContentResolver cv = mContext.getContentResolver();
    return cv.query(Uri.parse(uri), null, clause, null, null);   
}

private void showInfo(String info){
    ……
}

调用showSomeEntries(1,2);后,得到:

Pro Android学习笔记(一六三):联系人API(6):联系人详细信息_第3张图片

 

小例子下载。

相关链接:我的Android开发相关文章

你可能感兴趣的:(Pro Android学习笔记(一六三):联系人API(6):联系人详细信息)