Android 기기에 현재 연락처 목록이 있습니다. 모든 연락처의 연관된 groupIds 및 GroupName을 가져 오려고합니다. ContactsContract.Groups._ID를 사용하여 ID를 얻으려고했지만 그걸 가져올 수 없습니다. 다른 사람이 나에게 groupID 연락을 제공 할 수 있습니까?Android에서 연락처의 groupId/GroupName을 어떻게 얻을 수 있습니까?
답변
이것은 내가하는 방법입니다. 두 가지 쿼리를 수행하지 않아도되므로 더 빨리 해결할 수 있습니다.
아이디어는 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();
}
}
연락처가 여러 그룹에있을 수 있습니다.이 경우 루프를 사용하지 않는 이유는 무엇입니까? – vuhung3990
@ vuhung3990 물론 그렇게 할 수 있습니다. 이것은 일반적인 아이디어 일뿐입니다. – giZm0
당신이 봤어은? 도움이 될 수 있습니다. http://stackoverflow.com/questions/3026750/android-2-0-contact-groups-manipulation –
giZm0은 'GroupMembership'보기와 함께 올바른 길을 걷고 있습니다 ... 연락처가 더 많은 것에 속할 수 있지만 한 그룹보다. – eidylon