我找到了一个关于如何从电话中检索联系人组的好代码:
final String[] GROUP_PROJECTION = new String[] {ContactsContract.Groups._ID, ContactsContract.Groups.TITLE };
Cursor cursor = getContentResolver().query(ContactsContract.Groups.CONTENT_URI, GROUP_PROJECTION, null, null, ContactsContract.Groups.TITLE);
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Groups._ID));
String gTitle = (cursor.getString(cursor.getColumnIndex(ContactsContract.Groups.TITLE)));
if (gTitle.contains("Group:")) {
gTitle = gTitle.substring(gTitle.indexOf("Group:") + 6).trim();
}
if (gTitle.contains("Favorite_")) {
gTitle = "Favorites";
}
if (gTitle.contains("Starred in Android") || gTitle.contains("My Contacts")) {
continue;
}
arr_groups.add(gTitle);
arr_groupswithid.add(id + "." + gTitle);
}
结果是:
我不知道为什么我会得到更多具有不同 id-s 的同一组。也许正如 Abhishek 所说,这与存储在 SIM 卡、手机上或从 Facebook 或 Gmail 同步的联系人有关。
忽略这一点,我一直在尝试检索属于特定组的联系人,但我从来没有得到正确的号码。
String groupId = "10";
String where = ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + "="
+ groupId + " AND "
+ ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE + "='"
+ ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE + "'";
Cursor c = getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
new String[] {
ContactsContract.CommonDataKinds.GroupMembership.RAW_CONTACT_ID,
ContactsContract.Data.DISPLAY_NAME
}, where, null, ContactsContract.Data.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
Log.i("cursorc", c.getCount() + "");
如果 groupId==10,我得到 7 个联系人。如果是 ==12,我得到 11。如果是 ==5,我得到 0。总共 18,这很好,因为我在同事组中有 18 人,见下图。
如果 groupId==3,我得到 0 个联系人。如果是 ==9,我得到 2。如果是 ==13,我得到 0。总而言之 2,这很好。
如果 groupId==1,我得到 0 个联系人。我的最爱到底在哪里??它应该给我2。
如果 groupId==6,我得到 0 个联系人。我的常用联系人到底在哪里??它应该给我17。
这些是我手机中的群组:
我不知道现在该怎么办。