看到这个标题:首先必须想到
1,找到手机系统为我们提供的联系人数据库,其地址为:
/data/data/com.android.providers.contact/cache/database/contacts2.db
2,查询数据库中的表:data(得到数据),mimetypes(获取类型),raw_contacts(获取ID),和视图view(关系)
3,具体实现代码如下:写个公共静态的方法
public class ContactUtils{
public static List<ContactInfo> getContacts(Context context){
//准备一个集合用来转载查询的联系人数据
List<ContactInfo> lists = new ArrayList<>();
//获得一个内容解析者,(查询别人的数据库)
ContentResolver resolver = context.getContentReslver();
//准备uri(查询的是那张表,其组成为:content://主机名/表名)查询到具体的contact_id
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
//在准备一个Uri根据具体的contact_id,查询具体的联系人信息
Uri datauri = Uri.parse("content://com.android.contacts/data");
//开始查询
Cursor cursor = resolver.query(uri,new String[]{"contact_id"},null,null,null);
while(cursor .moveToNext()){
//说明有数据
String contact_id = cursor.getString(0);
if(!TextUtils.isEmpty(contact_id)){
ContactInfo info = new ContactInfo();
//开始根据新的条件查询具体的数据
Cursor dataCursor = resolver.query(datauri, new String[]{"mimetype","data1"},"raw_contact_id = ?",new String[]{contact_id},null);
while(dataCursor.moveToNext()){
String mimetype = dataCursor.getString(0);
if("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
//说明是一个电话号码
info.phone= dataCursor.getString(1);
}else if("vnd.android.cursor.item/name".equals(mimetype)) {
//说明这个data1是名字
info.name=dataCursor.getString(1);
}
}
lists.add(info);
}
}
return lists;
}
public static class ContactInfo{
public String name; //联系人名字
public String phone;//联系人的号码
}
}