ContactsContract 类是存储联系人相关信息的数据库。
获取联系人信息的URL:ContactsContract.Contacts.CONTENT_URI
几个需要用到的字段:
ContactsContract.Contacts.DISPLAY_NAME 获取联系人名字
ContactsContract.Contacts.HAS_PHONE_NUMBER 是否有号码
ContactsContract.Contacts._ID 获取联系人ID(每个联系人名字会有一个唯一对应的ID)
要获取联系人的某些信息,就可以用CommonDataKinds这个类,例如查找联系人的电话号码相关信息(ContactsContract.CommonDataKinds.Phone), ContactsContract.CommonDataKinds.Phone.CONTENT_URI这个URL可以查找所有联系人电话号码的数据。
首先,获取联系人信息表:
/*ContentResolver ----> This class provides applications access to the content model.*/
ContentResolver resolver = this.getContentResolver();//获取ContentResolver实例
//标志你想获取联系人信息的列(这里是,联系人姓名、是否有号码、联系人ID)
String[] PROJECTION={ ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER,
ContactsContract.Contacts._ID};
/*需要添加权限--- <uses-permission android:name="android.permission.READ_CONTACTS" /> ---*/
//获取到整份联系人的表,这份表有以上三列的信息
Cursor phoneCursor=resolver.query(ContactsContract.Contacts.CONTENT_URI,PROJECTION,null,null,null);
然后,根据唯一的联系人ID,查找对应的电话号码
//联系人姓名
String telDisplayName=phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
//是否有电话号码:0代表没有,1代表有
int hasTelNumber=phoneCursor.getInt(phoneCursor.getColumnIndex( ContactsContract.Contacts.HAS_PHONE_NUMBER));
//联系人ID
String contactId=phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.Contacts._ID));
if (!TextUtils.isEmpty(telDisplayName)&&hasTelNumber==1){
//查询该联系人的所有电话号码
Cursor phoneNumberCursor=resolver.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId ,null,null);
if (phoneNumberCursor!=null){
while (phoneNumberCursor.moveToNext()){
//获取联系人电话号码,一个联系人可能有多个电话号码
String telNumber=phoneNumberCursor.getString(phoneNumberCursor.getColumnIndex
(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.d(TAG, "获取联系人---- Name== "+telDisplayName+"----Number== "+telNumber);
}
}
}
}
以下是完整的代码
/**
* 获取联系人姓名和电话号码
*/
private void getContactInfo(){
List<TelBean> telBeanList=new ArrayList<>();
/*ContentResolver ----> This class provides applications access to the content model.*/
ContentResolver resolver = this.getContentResolver();//获取ContentResolver实例
String[] PROJECTION={ ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER,
ContactsContract.Contacts._ID};
/*需要添加权限--- <uses-permission android:name="android.permission.READ_CONTACTS" /> ---*/
Cursor phoneCursor=resolver.query(ContactsContract.Contacts.CONTENT_URI,PROJECTION,null,null,null);
if (phoneCursor!=null){
while (phoneCursor.moveToNext()){
TelBean telBean=new TelBean();
//联系人姓名
String telDisplayName=phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
telBean.setName(telDisplayName);
//是否有电话号码
int hasTelNumber=phoneCursor.getInt(phoneCursor.getColumnIndex( ContactsContract.Contacts.HAS_PHONE_NUMBER));
//联系人ID
String contactId=phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.Contacts._ID));
Log.d(TAG, "ContactsContract.Contacts._ID: ----"+contactId);
if (!TextUtils.isEmpty(telDisplayName)&&hasTelNumber==1){
//查询该联系人的所有电话号码
Cursor phoneNumberCursor=resolver.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId ,null,null);
if (phoneNumberCursor!=null){
while (phoneNumberCursor.moveToNext()){
//获取联系人电话号码
String telNumber=phoneNumberCursor.getString(phoneNumberCursor.getColumnIndex
(ContactsContract.CommonDataKinds.Phone.NUMBER));
telBean.setNumber(telNumber);
telBeanList.add(telBean);
Log.d(TAG, "获取联系人---- Name== "+telDisplayName+"----Number== "+telNumber);
}
}
}
}
Log.d(TAG, "Contact Count==: "+telBeanList.size());
}
}
private class TelBean {
private String Name;
private String Number;
public void setName(String name) {
Name = name;
}
public void setNumber(String number) {
Number = number;
}
public String getName() {
return Name;
}
public String getNumber() {
return Number;
}
}
以上。