2010-12-02 17 views

Respuesta

9
final String[] GROUP_PROJECTION = new String[] { 
      ContactsContract.Groups._ID, ContactsContract.Groups.TITLE }; 
    cursor = getContentResolver().query(
    ContactsContract.Groups.CONTENT_URI, GROUP_PROJECTION, null, 
      null, ContactsContract.Groups.TITLE); 

      GlobalConfig.groupList.clear(); 
    Group g = new Group(); 
    g.GroupIdList += "0"; 
    g.setGroupTitle("ALL"); 
    GlobalConfig.groupList.add(g); 
    while (cursor.moveToNext()) { 

     String id = cursor.getString(cursor 
       .getColumnIndex(ContactsContract.Groups._ID)); 

     String gTitle = (cursor.getString(cursor 
       .getColumnIndex(ContactsContract.Groups.TITLE))); 

     if (gTitle.contains("Group:")) { 
      gTitle = gTitle.substring(gTitle.indexOf("Group:") + 6).trim(); 

     } 
     if (gTitle.contains("Favorite_")) { 
      gTitle = "Favorites"; 
     } 
     if (gTitle.contains("Starred in Android") 
       || gTitle.contains("My Contacts")) { 
      continue; 
     } 

     Group gObj = new Group(); 

     int pos = GlobalConfig.GroupContainsTitle(gTitle); 
     if (pos != -1) { 
      gObj = GlobalConfig.groupList.get(pos); 
      gObj.GroupIdList += "," + id; 
      GlobalConfig.groupList.set(pos, gObj); 

     } else { 
      gObj.GroupIdList += id; 
      gObj.setGroupTitle(gTitle); 
      GlobalConfig.groupList.add(gObj); 

     } 

     // Log.d("GrpId Title", gObj.getGroupIdList() + 
     // gObj.getGroupTitle()); 
    } 
+0

Es una solución perfecta para mi pregunta. Pero, aquí no entiendo el uso de la clase GlobalConfig y la forma en que almacena el GroupContainsTitle dado. Entonces, @Abhishek puede aclarar más sobre la clase GlobalConfig. Me ahorrará tiempo. – Prativa

+0

@prativa GlobalConfig es simplemente una clase estática simple que se usa aquí para almacenar colecciones estáticas a las que se puede acceder a través de la aplicación. – Abhi

+0

¡Perfecto! ¿Por qué obtengo más de los mismos grupos? Obtengo p. Ej. 3 compañeros de trabajo y 2 amigos. – erdomester

5

La respuesta por @Abhi está bien, pero tiene algunos límites:

  • contactos mostrará una lista de borrados
  • mostrará una lista de grupos invisibles
  • grupos
  • mostrará una lista de 'fantasma' (es decir grupos que debería haber sido eliminado, pero aún se encuentran en el limbo)

-

private class GroupInfo { 
    String id; 
    String title; 

    @Override 
    public String toString() { 
     return title+ " ("+id+")"; 
    } 

    public String getId() { 
     return id; 
    } 
} 

List<GroupInfo> groups = new ArrayList<GroupInfo>(); 

public void loadGroups() { 
    final String[] GROUP_PROJECTION = new String[] { 
      ContactsContract.Groups._ID, 
      ContactsContract.Groups.TITLE, 
      ContactsContract.Groups.SUMMARY_WITH_PHONES 
      }; 

    Cursor c = getContentResolver().query(
      ContactsContract.Groups.CONTENT_SUMMARY_URI, 
      GROUP_PROJECTION, 
      ContactsContract.Groups.DELETED+"!='1' AND "+ 
      ContactsContract.Groups.GROUP_VISIBLE+"!='0' " 
      , 
      null, 
      null); 
    final int IDX_ID = c.getColumnIndex(ContactsContract.Groups._ID); 
    final int IDX_TITLE = c.getColumnIndex(ContactsContract.Groups.TITLE); 

    Map<String,GroupInfo> m = new HashMap<String, GroupInfo>(); 

    while (c.moveToNext()) { 
     GroupInfo g = new GroupInfo(); 
     g.id = c.getString(IDX_ID); 
     g.title = c.getString(IDX_TITLE); 
     int users = c.getInt(c.getColumnIndex(ContactsContract.Groups.SUMMARY_WITH_PHONES)); 
     if (users>0) { 
      // group with duplicate name? 
      GroupInfo g2 = m.get(g.title); 
      if (g2==null) { 
       m.put(g.title, g); 
       groups.add(g); 
      } else { 
       g2.id+=","+g.id; 
      } 
     } 
    } 
    c.close(); 
    } 
1

No hay necesidad de antiguas respuestas exageradas. Solución mucho más simple aquí.

final String[] GROUP_PROJECTION = new String[] { 
      ContactsContract.Groups._ID, ContactsContract.Groups.TITLE }; 
Cursor gC = getContentResolver().query(
      ContactsContract.Groups.CONTENT_URI, GROUP_PROJECTION,null,null,null); 
gC.moveToFirst(); 
while (!gC.isAfterLast()) { 
     int idcolumn = gC.getColumnIndex(ContactsContract.Groups.TITLE); 
     String Id = gC.getString(idcolumn); 
     ArrayL.add(Id); 
     gC.moveToNext(); 
} 
     LinkedHashSet<String> s = new LinkedHashSet<String>(); 
     s.addAll(ArrayL); 
     ArrayL.clear(); 
     ArrayL.addAll(s); 
+0

Gracias amigo! esto es más simple. – Darsh

+0

¿De dónde viene "ArrayL"? – retorquere

Cuestiones relacionadas