Android 根据组ID从联系人组获取联系人

Android 根据组ID从联系人组获取联系人,android,contactscontract,Android,Contactscontract,我发现了一个关于如何从电话中检索联系人组的好方法: final String[] GROUP_PROJECTION = new String[] {ContactsContract.Groups._ID, ContactsContract.Groups.TITLE }; Cursor cursor = getContentResolver().query(ContactsContract.Groups.CONTENT_URI, GROUP_PROJECTION, null, null, Con

我发现了一个关于如何从电话中检索联系人组的好方法:

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);
}    
结果是:

我不知道为什么同一组人中有更多的人有不同的身份证。也许正如阿披舍克暗示的那样,这与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分

以下是我手机中的通话组:


我不知道现在该怎么办。

您的组帐户类型不同,因此您可以使用不同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帐户类型

您的问题是什么?对于这个问题,您对我们有什么期望?检查您是否在同一个组中有多个联系人,也许这就是您出现多个组的原因此选择查询的选择参数是什么?不需要,因为我直接输入了值;如果需要,您可以在需要@SagarHudge的每个字段上添加问号(?)