如何在Android中获取联系人的groupId / GroupName?

时间:2010-12-10 05:32:22

标签: android contacts android-contacts

我正在安装Android设备中的联系人列表。我想获取所有联系人的关联groupIds和GroupName。我一直在尝试使用ContactsContract.Groups._ID来获取ID,但我无法得到它。有人可以通过其他方式获取联系人的groupID吗?

1 个答案:

答案 0 :(得分:7)

我就是这样做的。通过不进行两次查询,您可能会陷入困境并找到更快的解决方案。

我们的想法是使用GroupMembership.GROUP_ROW_ID从数据表中获取组的行ID。如果您有行ID,则使用该行来查询“组”表以获取组的名称(标题)。

Groups.TITLE通常不是一个好名字,你可能需要格式化或搜索以找到更好的东西。

以下是获取联系人ID的代码:

public long getGroupIdFor(Long contactId){
    Uri uri = Data.CONTENT_URI;
    String where = String.format(
            "%s = ? AND %s = ?",
            Data.MIMETYPE,
            GroupMembership.CONTACT_ID);

    String[] whereParams = new String[] {
               GroupMembership.CONTENT_ITEM_TYPE,
               Long.toString(contactId),
    };

    String[] selectColumns = new String[]{
            GroupMembership.GROUP_ROW_ID,
    };


    Cursor groupIdCursor = mContext.getContentResolver().query(
            uri, 
            selectColumns, 
            where, 
            whereParams, 
            null);
    try{
        if (groupIdCursor.moveToFirst()) {
            return groupIdCursor.getLong(0);
        }
        return Long.MIN_VALUE; // Has no group ...
    }finally{
        groupIdCursor.close();
    }
}

以下是获取小组标题的代码:

public String getGroupNameFor(long groupId){
    Uri uri = Groups.CONTENT_URI;
    String where = String.format("%s = ?", Groups._ID);
    String[] whereParams = new String[]{Long.toString(groupId)};
    String[] selectColumns = {Groups.TITLE};
    Cursor c = mContext.getContentResolver().query(
            uri, 
            selectColumns,
            where, 
            whereParams, 
            null);

    try{
        if (c.moveToFirst()){
            return c.getString(0);  
        }
        return null;
    }finally{
        c.close();
    }
}