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来读取详细信息。
和之前的小例子一样,构造一个类来存放这些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开发相关文章
在前面我们学习过,数据库中有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开发相关文章
相关文章推荐
- Pro Android学习笔记(一六一):联系人API(4):读取整合联系人
- Pro Android学习笔记(一六二):联系人API(5):读Raw Contacts
- Pro Android学习笔记(一六七):联系人API(10):在Personal Profile中添加raw contact
- Pro Android学习笔记(一五九):联系人API(2):联系人应用
- Pro Android学习笔记(一五八):联系人API(1):账号
- Pro Android学习笔记(一六六):联系人API(9):Personal Profile
- Pro Android学习笔记(一六四):联系人API(7):添加联系人
- Pro Android学习笔记(一六十):联系人API(3):联系人数据
- Pro Android学习笔记(一六五):联系人API(8):控制整合
- android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作。 注
- Andrid——获取手机中联系人详细信息
- isbn书号查询api,根据图书ISBN查询详细信息
- C++通过WIN32 API获取逻辑磁盘详细信息
- Java快递物流查询接口,怎么接入物流接口API,如何根据单号查询物流跟踪的详细信息的Demo详细说明。
- C++ 通过WIN32 API 获取逻辑磁盘详细信息
- ios获取系统信息的详细api
- ArcGIS For JavaScript API Specify LODs (levels of detail深度的详细信息)————(十四)
- 【转】android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作。 注
- android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作。 注
- C++ 通过WIN32 API 获取逻辑磁盘详细信息