2011-09-06 25 views

Respuesta

39

puede obtener contactos en orden Alphabatical así:

Cursor cursor = getContentResolver.query(Phone.CONTENT_URI, null, null, null, Phone.DISPLAY_NAME + " ASC"); 

se refieren estos enlaces para obtener más cearity:

How to call Android contacts list?

How to get contacts from native phonebook in android

How to obtain all details of a contact in Android

How to get the first name and last name from Android contacts?

How to import contacts from phonebook to our application

Android contacts extraction

How to get all android contacts but without those which are on SIM

Para la lista se puede consultar este tutorial:

http://www.vogella.de/articles/AndroidListView/article.html

+0

Gracias hombre! Eres increíble: D –

0

uso este código para recuperar los contactos

ArrayList<HashMap<String,String>> contactData=new ArrayList<HashMap<String,String>>(); 
ContentResolver cr = getContentResolver(); 
    Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 
    while (cursor.moveToNext()) { 
     try{ 
     String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
     String name=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
     if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
      Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null); 
      while (phones.moveToNext()) { 
       String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
       HashMap<String,String> map=new HashMap<String,String>(); 
       map.put("name", name); 
       map.put("number", phoneNumber); 
       contactData.add(map); 
      } 
      phones.close(); 
     } 
    }catch(Exception e){} 
    } 

Ahora los datos de contacto se almacenan en el contactData ArrayList. Ahora resolver esto arrayList como abajo

Collections.sort(contactData, new Comparator(){ 
       @Override 
       public int compare(Object o1, Object o2) { 
        HashMap map1=(HashMap)o1; 
        HashMap map2=(HashMap)o2; 
        String s1=(String)map1.get("name"); 
        String s2=(String)map2.get("name"); 
        return s1.compareTo(s2); 
       } 
      }); 

Ahora los datos de contacto se almacenan en el orden de clasificación en el Datos de contacto ArrayList.

+0

Esto funcionó, pero hay duplicados en cada contacto – Gibs

0

he añadido encabezados alfabéticos a la lista de contactos

new ReadContactTask(context, showProgressDialog,new OnContactReadListener() { 
      @Override 
      public void onContactRead(List<ContactItem> dummyList) { 

       ArrayList<ContactItem> latestPhoneContacts = new ArrayList<>(); 

       if(dummyList!=null && dummyList.size()>0) 
       { 
        tvNoResult.setVisibility(View.GONE); 

        for(ContactItem contactItem : dummyList){ 
         String contactNameInCapital = ""; 
         if(contactItem.getContactName()!=null && contactItem.getContactName().length()>2){ 
          contactNameInCapital = contactItem.getContactName().substring(0,1).toUpperCase(); 

          if(contactNameInCapital.charAt(0) != previousContact.charAt(0)) 
          { 
           latestPhoneContacts.add(new ContactItem(contactNameInCapital.substring(0,1))); 
           latestPhoneContacts.add(contactItem); 
          } 
          else 
          { 
           latestPhoneContacts.add(contactItem); 
          } 

          previousContact = contactNameInCapital; 
         } 
        } 
        if(latestPhoneContacts!=null && latestPhoneContacts.size()>0) 
         contactListAdapter.addItems(latestPhoneContacts); 
       } 
      } 

      @Override 
      public void onContactEmpty() { 

      } 
     }).execute(); 

donde

private String previousContact ="Zee"; 
+0

¿Qué es ContactItem? – Gibs

0

Es necesario hacer esto:

Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"); 
Cuestiones relacionadas