我正在安装Android设备中的联系人列表。我想获取所有联系人的关联groupIds和GroupName。我一直在尝试使用ContactsContract.Groups._ID来获取ID,但我无法得到它。有人可以通过其他方式获取联系人的groupID吗?
答案 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();
}
}