我找到一个很棒的code如何从手机中检索联系人群组:
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来获得更多相同的组。也许正如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。
这些是我手机中的群组:
我现在不知道该怎么做。
答案 0 :(得分:2)
您的论坛ACCOUNT_TYPE是不同的,因此您可以获得具有不同ID和不同计数的相同名称,因此您应该确定您希望在您的选择中获取其类型的类型,例如您可以将您的选择更改为
final String GROUP_SELECTION = ContactsContract.Groups.AUTO_ADD + " = 0 "
+ " AND " + ContactsContract.Groups.ACCOUNT_TYPE + " = 'com.google' "
// + " AND " + ContactsContract.Groups.ACCOUNT_TYPE + " = 'DeviceOnly' "
// + " AND " + ContactsContract.Groups.ACCOUNT_TYPE + " = 'vnd.sec.contact.phone' "
+ " AND " + ContactsContract.Groups.SUMMARY_WITH_PHONES + " > 0 "
+ " AND " + ContactsContract.Groups.ACCOUNT_NAME + " NOT NULL "
+ " AND " + ContactsContract.Groups.FAVORITES + " = 0 "
+ " AND " + ContactsContract.Groups.DELETED + " = 0 ";
这仅显示将com.google作为ACCOUNT_TYPE
的群组