/**
* 获取所有联系人信息
* @param context上下文
* @return
*/
public static List<ContactInfo> getContactInfos(Context context){
//添加android.permission.READ_CONTACTS
//由于数据库是私有的别的应用不能直接访问,需要通过系统自带的内容提供者解析器获取
ContentResolver resolver=context.getContentResolver();//获取应用程序内容的解析器
List<ContactInfo> infos=new ArrayList<ContactInfo>();
Uri rawcontactUri=Uri.parse("content://com.android.contacts/raw_contacts");//内容提供者的数据库的路径
Uri dataUri=Uri.parse("content://com.android.contacts/data");//查看源码ContactsProvider2.calss的UriMatcher
Cursor contaccursor=resolver.query(rawcontactUri, new String[]{"contact_id"}, null, null, null);//参数、条件、排序
//查询某一个uri的数据库 ,在系统上层源码的、providers\ContactsProvider\AndroidManifest.xml查看,可以参考contactsContract类
while (contaccursor.moveToNext()) {
String id=contaccursor.getString(0);//联系人id :contact_id
ContactInfo info=new ContactInfo();
Cursor dataCursor=resolver.query(dataUri, new String[]{"data1","mimetype"}, "raw_contact_id=?", new String[]{id}, null);
while (dataCursor.moveToNext()) {
String data1=dataCursor.getString(0);
String mimetype=dataCursor.getString(1);
if("vnd.android.cursor.item/name".equals(mimetype)){
info.setName(data1);//姓名
}else if("vnd.android.cursor.item/phone_v2".equals(mimetype)){
info.setPhone(data1);
}
}
dataCursor.close();
infos.add(info);//添加存入对象
}
contaccursor.close();
return infos;
}
}