获取电话簿中所有联系人的列表。某些联系人可能有多个号码(例如,号码类型为MOBILE,HOME,WORK,HOME_FAX ....)。当我选择所有联系人列表时,它会返回与特定联系人ID相对应的所有号码。
我需要的是如何为所有联系人选择默认号码( IS_SUPER_PRIMARY )。如果默认联系人号码不可用,则它会检索主要( IS_PRIMARY )联系人,但不应为同一联系人ID提供多个联系人号码。
ContentResolver cr = getActivity().getContentResolver();
String selection;
String[] select = new String[]{ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER, ContactsContract.Contacts.PHOTO_THUMBNAIL_URI, ContactsContract.Contacts.STARRED};
if (isFav) {
selection = "starred=1";
} else {
selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '"
+ ("1") + "'";
}
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
Cursor cur = cr.query(
ContactsContract.Contacts.CONTENT_URI, select, selection
+ " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER
+ "=1", null, sortOrder);// this query only return contacts which had phone number and not duplicated
List<ContactItem> contactList = new ArrayList<>();
try {
if (cur != null && cur.getCount() > 0) {
while (cur.moveToNext()) {
int id = cur.getInt(
cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(
ContactsContract.Contacts.DISPLAY_NAME));
String image = cur.getString(cur.getColumnIndex(
ContactsContract.Contacts.PHOTO_THUMBNAIL_URI));
int favState = cur.getInt(cur.getColumnIndex(
ContactsContract.Contacts.STARRED));
if (cur.getInt(cur.getColumnIndex(
ContactsContract.Contacts.HAS_PHONE_NUMBER)) >= 1) {
String[] selectOnly = new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.IS_SUPER_PRIMARY, ContactsContract.CommonDataKinds.Phone.IS_PRIMARY};
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
selectOnly,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? ",
new String[]{String.valueOf(id)}, null);
while (pCur != null && pCur.moveToNext()) {
ContactItem item = new ContactItem();
String phoneNo = pCur.getString(pCur.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER));
int phoneType = pCur.getInt(pCur.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.TYPE));
item.setId(id);
item.setImage(image);
item.setName(name);
item.setNumber(phoneNo);
item.setType(phoneType);
item.setIsStarred(favState);
contactList.add(item);
}
if (pCur != null)
pCur.close();
}
}
}
if (cur != null)
cur.close();
} catch (Exception e) {
e.printStackTrace();
}