2014-03-07 24 views

回答

1

尝试用这家伙:)好运

的,这是类的代码

public class ReadContacts extends AsyncTask<Void, Void, Void>{ 
     private ListView contactsList; 

     private Context cntx; 
     private Constant constants; 

     static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] { 
      Contacts._ID, // 0 
      Contacts.DISPLAY_NAME, // 1 
      Contacts.STARRED, // 2 
      Contacts.TIMES_CONTACTED, // 3 
      Contacts.CONTACT_PRESENCE, // 4 
      Contacts.PHOTO_ID, // 5 
      Contacts.LOOKUP_KEY, // 6 
      Contacts.HAS_PHONE_NUMBER, // 7 
     }; 

     private long contactId; 
     private String display_name; 
     private String phoneNumber; 

     private ArrayList<ContactsWrapper>contactWrap = new ArrayList<ContactsWrapper>(); 
     private HashMap<Long, ArrayList<ContactsWrapper>>map = new HashMap<Long, ArrayList<ContactsWrapper>>(); 

     private ContactsAdapter adapter; 

     private DataController controller; 

     public ReadContacts(Context cntx, ListView contactList) { 
      // TODO Auto-generated constructor stub 
      this.cntx = cntx; 
      constants = new Constant(); 
      this.contactsList = contactList; 

      controller = DataController.getInstance(); 
     } 

     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 
      if(!(controller.contactWrapper.size()>0)) 
       constants.displayProgressDialog(cntx, "Loading Contacts...", "Please Wait"); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      // TODO Auto-generated method stub 

      if(!(controller.contactWrapper.size()>0)) 
      { 
      try { 
       String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND (" 
         + Contacts.HAS_PHONE_NUMBER + "=1) AND (" 
         + Contacts.DISPLAY_NAME + " != ''))"; 

       Cursor c = cntx.getContentResolver().query(Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, select, 
         null, Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 

       int colorcounter = 0; 
       String[] colorcounter_array = { "#91A46B", "#8BB6B5", "#CAA973", "#8DA6C8","#D19B8D"}; 

       int color_string; 
       for(int i=0;i<c.getCount();i++) 
       { 
    //    contactWrap.clear(); 
        try { 
         contactId = 0; 
         String hasPhone = ""; 
         display_name = ""; 
         phoneNumber = ""; 

         c.moveToPosition(i); 

         contactId = c.getLong(0); 
         display_name = c.getString(1); 
         hasPhone = c.getString(7); 

         if (hasPhone.equalsIgnoreCase("1")) 
          hasPhone = "true"; 
         else 
          hasPhone = "false" ; 

         if (Boolean.parseBoolean(hasPhone)) 
         { 
          Cursor phones = cntx.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null); 
          while (phones.moveToNext()) 
          { 
           int indexPhoneType = phones.getColumnIndexOrThrow(Phone.TYPE); 
           String phoneType = phones.getString(indexPhoneType); 

           phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

           String lookupKey = phones.getString(phones.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); 

           if (colorcounter < 5) 
           { 
            color_string =Color.parseColor(colorcounter_array[colorcounter]); 
            colorcounter++; 
           } else { 
            colorcounter = 0; 
            color_string =Color.parseColor(colorcounter_array[colorcounter]); 
            colorcounter++; 
           } 
           contactWrap.add(new ContactsWrapper(contactId, display_name, phoneNumber,lookupKey,false,color_string)); 
          } 
    //      map.put(contactId, new ArrayList<ContactsWrapper>(contactWrap)); 
          phones.close(); 
         } 
        } catch (Exception e) { 

         e.printStackTrace(); 
        } 
       } 
       controller.contactWrapper = contactWrap; 
      } 
      catch (Exception e) { 
       // TODO: handle exception 
       e.printStackTrace(); 
      } 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 
      constants.dismissDialog(); 

      adapter = new ContactsAdapter(cntx); 
      contactsList.setAdapter(adapter); 
     } 

    } 

这是我的联系包装类

public class ContactsWrapper { 

    private long contactId; 
    private String displayName,displayNumber,lookUp; 
    public boolean checked = true; 
    int color_string; 

    public ContactsWrapper(long contactId, String displayName, String displayNumber, String lookUp, boolean checked,int color_string) { 
     // TODO Auto-generated constructor stub 
     this.contactId = contactId; 
     this.displayName = displayName; 
     this.displayNumber = displayNumber; 
     this.lookUp = lookUp; 
     this.checked = checked; 
     this.color_string =color_string; 
    } 

    public String getLookUp() { 
     return lookUp; 
    } 

    public int getColor_string() { 
     return color_string; 
    } 

    public boolean isChecked() { 
     return checked; 
    } 

    public long getContactId() { 
     return contactId; 
    } 

    public String getDisplayName() { 
     return displayName; 
    } 

    public String getDisplayNumber() { 
     return displayNumber; 
    } 

    public void setChecked(boolean checked) { 
     this.checked = checked; 
    } 
    } 
1

您可以在您的应用程序中使用COntacts应用程序的content provider。 经过this tutorial

相关问题