我有一个 Android 设备中的联系人列表。我想获取所有联系人的关联 groupIds 和 GroupName。我一直在尝试使用 ContactsContract.Groups._ID 来获取 ID,但我无法获取它。有人可以提供其他方式来获取联系人的 groupID 吗?
问问题
3315 次
1 回答
7
我就是这样做的。您可以通过不进行两次查询来解决问题并找到更快的解决方案。
这个想法是使用从数据表中获取组的行 id GroupMembership.GROUP_ROW_ID
。当您拥有行 id 时,您可以使用它来查询 Groups 表以获取组的名称(标题)。
通常这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();
}
}
于 2012-08-09T18:42:32.360 回答