2011-05-24 21 views
5

Deseo recuperar los detalles de contacto junto con el grupo al que pertenece. Obtuve el código para enumerar todos los grupos de contactos en el teléfono.Recuperando grupo de contacto particular

Cursor groupC = getContentResolver().query(
    ContactsContract.Groups.CONTENT_URI, null, null, null, null); 

while (groupC.moveToNext()) { 
    String groupid = 
     groupC.getString(groupC.getColumnIndex(ContactsContract.Groups._ID)); 
    Log.e("myTag", groupid); 
    String grouptitle = 
     groupC .getString(groupC.getColumnIndex(ContactsContract.Groups.TITLE)); 
    Log.e("myTag", grouptitle); 
} 
groupC.close(); 

Luego trató de consulta para un contacto determinado mediante su identificador pero siempre muestra There is no such column....

Cursor groupC = getContentResolver().query(
    ContactsContract.Groups.CONTENT_URI, 
    null, 
    ContactsContract.Contacts._ID+"= ?", 
    new String[]{id}, 
    null); 

donde id es

Cursor cur = cr.query(
    ContactsContract.Contacts.CONTENT_URI, 
    null, 
    null, 
    null, 
    null); 
id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 

Cómo consultar el grupo con un identificador de contacto en particular?

Respuesta

2

Encontré la respuesta. Deberíamos pasar la identificación de contacto sin procesar y el tipo de mime correcto.

String where = ContactsContract.Data.RAW_CONTACT_ID 
      + "=" 
      + Integer.parseInt(id) 
      + " AND " 
      + ContactsContract.Data.MIMETYPE 
      + "='" 
      + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE 
      + "'"; 

    Cursor cursor = ctx 
      .getContentResolver() 
      .query(ContactsContract.Data.CONTENT_URI, null, where, null, 
        null); 
    startManagingCursor(cursor); 
    Log.e("Count is:", ""+ cursor.getCount()); 
    while (cursor.moveToNext()) { 
     groupid = cursor 
       .getString(cursor.getColumnIndex(ContactsContract.Data.DATA1)); 
     Log.e("groupid", groupid); 
     builder.append(groupid); 

    }String where = ContactsContract.Data.RAW_CONTACT_ID 
      + "=" 
      + Integer.parseInt(id) 
      + " AND " 
      + ContactsContract.Data.MIMETYPE 
      + "='" 
      + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE 
      + "'"; 

    Cursor cursor = ctx 
      .getContentResolver() 
      .query(ContactsContract.Data.CONTENT_URI, null, where, null, 
        null); 
    startManagingCursor(cursor); 
    Log.e("Count is:", ""+ cursor.getCount()); 
    while (cursor.moveToNext()) { 
     groupid = cursor 
       .getString(cursor.getColumnIndex(ContactsContract.Data.DATA1)); 
     Log.e("groupid", groupid); 
     break; 
    } 

Un contacto puede estar en más de un grupo, aquí recupera su primer grupo pnly.

Creo que esto puede ser útil para alguien ...

+0

tiene que ser hecho de esta manera debido a que el GroupMembership no tiene un URI, solamente un tipo MIME. ¿Por qué Google decidió que esto era bueno? –

Cuestiones relacionadas