2010-12-10 3 views
6

Android 기기에 현재 연락처 목록이 있습니다. 모든 연락처의 연관된 groupIds 및 GroupName을 가져 오려고합니다. ContactsContract.Groups._ID를 사용하여 ID를 얻으려고했지만 그걸 가져올 수 없습니다. 다른 사람이 나에게 groupID 연락을 제공 할 수 있습니까?Android에서 연락처의 groupId/GroupName을 어떻게 얻을 수 있습니까?

+0

당신이 봤어은? 도움이 될 수 있습니다. http://stackoverflow.com/questions/3026750/android-2-0-contact-groups-manipulation –

+0

giZm0은 'GroupMembership'보기와 함께 올바른 길을 걷고 있습니다 ... 연락처가 더 많은 것에 속할 수 있지만 한 그룹보다. – eidylon

답변

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(); 
    } 
} 
+0

연락처가 여러 그룹에있을 수 있습니다.이 경우 루프를 사용하지 않는 이유는 무엇입니까? – vuhung3990

+1

@ vuhung3990 물론 그렇게 할 수 있습니다. 이것은 일반적인 아이디어 일뿐입니다. – giZm0