Accessing Android Contact Group Names

Can you please tell me how to fetch contact groups programmatically
stored in our android phone?

  • How to make my app full screen on Galaxy Tab
  • No resource found that matches the given name: attr 'android:keyboardNavigationCluster'. when updating to Support Library 26.0.0
  • Phonegap(3.0.0) Camera not successful on first try
  • Get active Application name in Android
  • Remove item from “Android Private Libraries” that is not in my project's libs folder
  • Android Web App : Position:fixed broken?
  • Related posts:

    Remove background drawable programmatically in Android
    Can you programmatically detect white noise?
    How to install an app in system/app while developing from android studio
    How to get number of days between two calendar instance?
    Drawing a gradient in Libgdx
    Android get only image from gallery
  • Is there a way to hide the upper and lower values in a NumberPicker
  • BLE obtain uuid encoded in advertising packet
  • How to get the Touch position in android?
  • Can't see Generate Gradle build files when migrating from Eclipse to Android Studio
  • SupportMapFragment.getMap() on a null object reference
  • Taking photos “simply” does not work
  • 3 Solutions collect form web for “Accessing Android Contact Group Names”

    final String[] GROUP_PROJECTION = new String[] {
                ContactsContract.Groups._ID, ContactsContract.Groups.TITLE };
        cursor = getContentResolver().query(
        ContactsContract.Groups.CONTENT_URI, GROUP_PROJECTION, null,
                null, ContactsContract.Groups.TITLE);
    
                GlobalConfig.groupList.clear();
        Group g = new Group();
        g.GroupIdList += "0";
        g.setGroupTitle("ALL");
        GlobalConfig.groupList.add(g);
        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;
            }
    
            Group gObj = new Group();
    
            int pos = GlobalConfig.GroupContainsTitle(gTitle);
            if (pos != -1) {
                gObj = GlobalConfig.groupList.get(pos);
                gObj.GroupIdList += "," + id;
                GlobalConfig.groupList.set(pos, gObj);
    
            } else {
                gObj.GroupIdList += id;
                gObj.setGroupTitle(gTitle);
                GlobalConfig.groupList.add(gObj);
    
            }
    
            // Log.d("GrpId  Title", gObj.getGroupIdList() +
            // gObj.getGroupTitle());
        }
    

    The answer by @Abhi is ok but has some limits:

    • will list deleted contacts
    • will list invisible groups
    • will list ‘ghost’ groups (that is groups which should have been deleted but are still in the limbo)

    private class GroupInfo {
        String id;
        String title;
    
        @Override
        public String toString() {
            return title+ " ("+id+")";
        }
    
        public String getId() {
            return id;
        }
    }
    
    List<GroupInfo> groups = new ArrayList<GroupInfo>();
    
    public void loadGroups() {
       final String[] GROUP_PROJECTION = new String[] {
                ContactsContract.Groups._ID, 
                ContactsContract.Groups.TITLE,
                ContactsContract.Groups.SUMMARY_WITH_PHONES
                };
    
        Cursor c = getContentResolver().query(
                ContactsContract.Groups.CONTENT_SUMMARY_URI,
                GROUP_PROJECTION,
                ContactsContract.Groups.DELETED+"!='1' AND "+
                ContactsContract.Groups.GROUP_VISIBLE+"!='0' "
                ,
                null,
                null);
        final int IDX_ID = c.getColumnIndex(ContactsContract.Groups._ID);
        final int IDX_TITLE = c.getColumnIndex(ContactsContract.Groups.TITLE);
    
        Map<String,GroupInfo> m = new HashMap<String, GroupInfo>();
    
        while (c.moveToNext()) {
            GroupInfo g = new GroupInfo();
            g.id = c.getString(IDX_ID);
            g.title = c.getString(IDX_TITLE);
            int users = c.getInt(c.getColumnIndex(ContactsContract.Groups.SUMMARY_WITH_PHONES));
            if (users>0) {
                // group with duplicate name?
                GroupInfo g2 = m.get(g.title);
                if (g2==null) {
                    m.put(g.title, g);
                    groups.add(g);
                } else {
                    g2.id+=","+g.id;
                }
            }
        }
        c.close();
      }
    

    No need for old overdone answers. Much simpler solution here.

    final String[] GROUP_PROJECTION = new String[] {
                ContactsContract.Groups._ID, ContactsContract.Groups.TITLE };
    Cursor gC = getContentResolver().query(
                ContactsContract.Groups.CONTENT_URI, GROUP_PROJECTION,null,null,null);
    gC.moveToFirst();
    while (!gC.isAfterLast()) {
            int idcolumn = gC.getColumnIndex(ContactsContract.Groups.TITLE);
            String Id = gC.getString(idcolumn);
            ArrayL.add(Id);
            gC.moveToNext();
    }
            LinkedHashSet<String> s = new LinkedHashSet<String>();
            s.addAll(ArrayL);
            ArrayL.clear();
            ArrayL.addAll(s);
    
    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.