2010-12-10 6 views
6

У меня есть список контактов, присутствующих на устройстве Android. Я хочу получить связанные groupIds и GroupName всех контактов. Я пытаюсь использовать ContactsContract.Groups._ID для получения идентификатора, но я не могу его получить. Может ли кто-нибудь предоставить мне другой способ получить контакт группы?Как я могу получить groupId/GroupName контакта в Android?

+0

Вы смотрели на это? Это может помочь. http://stackoverflow.com/questions/3026750/android-2-0-contact-groups-manipulation – 2011-01-21 05:20:59

+0

giZm0 находится на правильном пути с представлением `GroupMembership` ... помните, что контакт может принадлежать более чем одна группа. – eidylon 2013-01-31 20:52:54

ответ

7

Вот как я это делаю. Вероятно, вы можете столкнуться и найти более быстрое решение, не выполняя два запроса.

Идея состоит в том, чтобы получить идентификатор строки группы из таблицы данных, используя GroupMembership.GROUP_ROW_ID. Когда у вас есть идентификатор строки, вы используете это для запроса таблицы групп, чтобы получить имя (Название) группы.

Часто Groups.TITLE не так уж хорошо, и вам, вероятно, придется отформатировать его или найти вокруг, чтобы найти что-нибудь лучше.

Вот код, чтобы получить идентификатор контакта:

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