如何从已知联系人获取组名
Posted
技术标签:
【中文标题】如何从已知联系人获取组名【英文标题】:How to get group name from a known contact 【发布时间】:2015-07-02 03:05:58 【问题描述】:我正在尝试根据字符串从联系人姓名中获取组名。我认为这将是一个更常见的问题,但我在 google 或此处看到的每个答案都已过时,没有答案或通过解释有关组的所有内容(除了实际问题所问的内容)得到了错误的回答。再一次,您如何获取您已经知道联系人姓名的联系人的组名?
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
while (phones.moveToNext())
String contactname=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String contactgroup = "GET GROUP NAME FROM STRING"(contactname);
phones.close();
【问题讨论】:
您是否尝试从ContactsContract.CommonDataKinds.GroupMembership 的联系人中获取ContactsContract.Groups 的列表和组ID? 【参考方案1】:此方法返回给定联系人姓名的组标题列表:
public List<String> getGroupsTitle(String name, Context context)
List<String> groupsTitle = new ArrayList<>();
String contactId = null;
Cursor cursorContactId = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[]ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + "=?",
new String[]name,
null);
if (cursorContactId.moveToFirst())
contactId = cursorContactId.getString(0);
cursorContactId.close();
if (contactId == null)
return null;
List<String> groupIdList = new ArrayList<>();
Cursor cursorGroupId = context.getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
new String[]ContactsContract.Data.DATA1,
String.format("%s=? AND %s=?", ContactsContract.Data.CONTACT_ID, ContactsContract.Data.MIMETYPE),
new String[]contactId, ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE,
null);
while (cursorGroupId.moveToNext())
String groupId = cursorGroupId.getString(0);
groupIdList.add(groupId);
cursorGroupId.close();
Cursor cursorGroupTitle = getContentResolver().query(
ContactsContract.Groups.CONTENT_URI, new String[]ContactsContract.Groups.TITLE,
ContactsContract.Groups._ID + " IN (" + TextUtils.join(",", groupIdList) + ")",
null,
null);
while (cursorGroupTitle.moveToNext())
String groupName = cursorGroupTitle.getString(0);
groupsTitle.add(groupName);
cursorGroupTitle.close();
return groupsTitle;
【讨论】:
你解决了这个问题。关于联系人数据库还有很多我不明白的地方,但是这个答案不仅有助于回答我的问题,而且还让我对在需要组 ID、标题等时如何浏览它有了一点了解。谢谢。以上是关于如何从已知联系人获取组名的主要内容,如果未能解决你的问题,请参考以下文章