您的位置:首页 > 移动开发 > Android开发

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

2015-04-23 21:08 423 查看
文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处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开发相关文章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐