看三张表:contacts , date , mimeType
其中,contacts 表查_id 为联系人id
date表 查 date1, (联系人的详细信息) date15,(联系人头像信息) mimetype_id
mimeType表 根据date表中mimetype_id 找到相应的联系人信息
具体代码实现示例:
private List<Contact> contacts;
/**
* 记得读数据的权限设置
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contacts= new ArrayList<Contact>();
ContentResolver crContacts=this.getContentResolver();
//cursorContacts:该查询所有联系人的id
Cursor cursorContacts = crContacts.query(Contacts.CONTENT_URI,
new String[]{Contacts._ID},null,null,null);
while(cursorContacts.moveToNext()){
Contact contact = new Contact();
contact.set_id(cursorContacts.getInt(0));
ContentResolver crData = getContentResolver();
//cursorData:这指针查询Data表中数据
Cursor cursorData = crData.query(Data.CONTENT_URI,
new String[]{Data.MIMETYPE,Data.DATA1,Data.DATA15},
Data.RAW_CONTACT_ID+"==?",
new String[]{String.valueOf(contact.get_id())} ,null);
//每一次内层循环,获取一个联系人的详细信息
while(cursorData.moveToNext()){
String mimeType=cursorData.getString(0);
if(mimeType.equals("vnd.android.cursor.item/phone_v2")){
contact.setPhone(cursorData.getString(1));
}else if(mimeType.equals("vnd.android.cursor.item/name")){
contact.setName(cursorData.getString(1));
}else if(mimeType.equals("vnd.android.cursor.item/postal-address_v2")){
contact.setCompany(cursorData.getString(1));
}else if(mimeType.equals("vnd.android.cursor.item/email_v2")){
contact.setEmail(cursorData.getString(1));
}else if(mimeType.equals("vnd.android.cursor.item/organization")){
contact.setAddress(cursorData.getString(1));
}else if(mimeType.equals("vnd.android.cursor.item/photo")){
byte[] data = cursorData.getBlob(2);
Bitmap bitmap= BitmapFactory.decodeByteArray(data, 0, data.length);
contact.setPhoto(bitmap);
}
}
//内层循环结束,释放资源
cursorData.close();
//将每次获取的联系人详细信息存储到list集合中
contacts.add(contact);
Log.i("TAG",contacts.toString());
}
cursorContacts.close();
}