2010-12-10 7 views
6

Tengo una lista de contactos presentes en un dispositivo Android. Quiero buscar los groupIds asociados y GroupName de todos los contactos. He intentado usar ContactsContract.Groups._ID para obtener la ID, pero no puedo obtenerla. ¿Alguien puede proporcionarme otra forma de obtener el groupID de contacto?¿Cómo puedo obtener un groupId/GroupName de un contacto en Android?

+0

¿Has mirado en esto? Puede ayudar. http://stackoverflow.com/questions/3026750/android-2-0-contact-groups-manipulation –

+0

giZm0 está en el camino correcto con la vista 'GroupMembership' ... tenga en cuenta que un contacto puede pertenecer a más de un grupo – eidylon

Respuesta

7

Así es como lo hago. Probablemente pueda perder el tiempo y encontrar una solución más rápida al no hacer dos consultas.

La idea es obtener el ID de fila del grupo de la tabla de datos usando GroupMembership.GROUP_ROW_ID. Cuando tiene la Id. De fila, la usa para consultar la tabla Grupos para obtener el nombre (Título) del grupo.

A menudo, el Groups.TITLE no es un buen nombre y probablemente tendrá que formatearlo o buscar para encontrar algo mejor.

Aquí está el código para obtener Contact 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(); 
    } 
} 

Y aquí está el código para obtener el título del grupo:

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

un contacto puede en muchos grupos, ¿por qué no usas loop para este caso? – vuhung3990

+1

@ vuhung3990 Seguro que puedes hacer eso, esta es solo la idea general. – giZm0

Cuestiones relacionadas