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。代码不再给出,输入结果为:

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

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

和之前的小例子一样,构造一个类来存放这些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);后,得到:

 

小例子下载

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值