android - 如何从已知联系人获取群组名称

标签 android cursor contacts contactscontract

我正在尝试根据字符串从联系人姓名中获取群组名称。我认为这将是一个更常见的问题,但我在谷歌或此处看到的每个答案都已过时,没有答案或通过解释关于群体的所有内容而被错误回答,除了实际问题所问的内容。再一次,你如何获得你已经知道联系人姓名的联系人的组名?

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

最佳答案

此方法返回给定联系人姓名的组标题列表:

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

关于android - 如何从已知联系人获取群组名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29831755/

相关文章:

android - 谷歌地图不会加载到我的 PhoneGap Android 应用程序中

java - 无法运行程序 "...\keytool.exe": CreateProcess error=2

android - Android 上的图形 : path with smooth curves?

android - 设计 "Platform-Independent"GWT 服务器的最佳方法是什么?

c# - WinAPI/WPF : Set system cursor only for application

python - 在 python flask 中使用游标对 postgres 查询进行分页

javascript - 如何使用 JavaScript 将联系人添加到 Blackberry Web 应用程序(如果可能)?

sql - 使用 Cursor 向现有表添加值

ios - 当用户添加新联系人时更新应用程序核心数据/Realm

ios - 快速按字母顺序加载联系人列表