访问Android联系人组名称

你能告诉我如何获取编程存储在我们的Android手机的联系人组

Solutions Collecting From Web of "访问Android联系人组名称"

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()); } 

@Abhi的答案是可以的,但有一些限制:

  • 将列出删除的联系人
  • 将列出隐形群体
  • 将列出“幽灵”组(即应该被删除但仍然处于困境的组)

 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(); } 

不需要旧的过度的答案。 这里更简单的解决scheme。

 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);