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

Bal*_*ant 6 android contacts android-contacts

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

giZ*_*Zm0 7

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

我们的想法是使用数据表获取组的行ID GroupMembership.GROUP_ROW_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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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();
    }
}
Run Code Online (Sandbox Code Playgroud)