适用于android1.x版本。
package com.iteedu.www; import java.util.ArrayList; import android.content.ContentResolver; import android.content.Intent; import android.database.Cursor; import android.provider.Contacts; import android.provider.Contacts.People; public class ContactAPISdk3 extends ContactAPI { private Cursor cur; private ContentResolver cr; public Cursor getCur() { return cur; } public void setCur(Cursor cur) { this.cur = cur; } public ContentResolver getCr() { return cr; } public void setCr(ContentResolver cr) { this.cr = cr; } public Intent getContactIntent() { return (new Intent(Intent.ACTION_PICK, People.CONTENT_URI)); } public ContactList newContactList() { ContactList contacts = new ContactList(); String id = ""; this.cur = this.cr.query(People.CONTENT_URI, null, null, null, null); if (this.cur.getCount() > 0) { while (cur.moveToNext()) { Contact c = new Contact(); id = cur.getString(cur.getColumnIndex(People._ID)); contacts.addContact(getContactByID(id)); } } cur.close(); return (contacts); } public Contact getContactByID(String id) { Contact c = new Contact(); this.cur = this.cr.query(People.CONTENT_URI, null, People._ID + "=" + id, null, null); if (this.cur.getCount() > 0) { while (cur.moveToNext()) { id = cur.getString(cur.getColumnIndex(People._ID)); c.setId(id); c.setDisplayName(cur.getString(cur .getColumnIndex(People.DISPLAY_NAME))); if (Integer.parseInt(cur.getString(cur .getColumnIndex(People.PRIMARY_PHONE_ID))) > 0) { c.setPhone(this.getPhoneNumbers(id)); } c.setEmail(this.getEmailAddresses(id)); c.setNotes(this.getContactNotes(id)); c.setAddresses(this.getContactAddresses(id)); c.setImAddresses(this.getIM(id)); c.setOrganization(this.getContactOrg(id)); } } cur.close(); return c; } public ArrayList<Phone> getPhoneNumbers(String id) { ArrayList<Phone> phones = new ArrayList<Phone>(); Cursor pCur = this.cr.query(Contacts.Phones.CONTENT_URI, null, Contacts.Phones.PERSON_ID + " = ?", new String[] { id }, null); while (pCur.moveToNext()) { phones.add(new Phone(pCur.getString(pCur .getColumnIndex(Contacts.Phones.NUMBER)), pCur .getString(pCur.getColumnIndex(Contacts.Phones.TYPE)))); } pCur.close(); return (phones); } public ArrayList<Email> getEmailAddresses(String id) { ArrayList<Email> emails = new ArrayList<Email>(); Cursor emailCur = this.cr.query( Contacts.ContactMethods.CONTENT_EMAIL_URI, null, Contacts.ContactMethods.PERSON_ID + " = ?", new String[] { id }, null); while (emailCur.moveToNext()) { // This would allow you get several email addresses Email e = new Email( emailCur.getString(emailCur .getColumnIndex(Contacts.ContactMethods.DATA)), emailCur.getString(emailCur .getColumnIndex(Contacts.ContactMethods.CONTENT_EMAIL_TYPE))); emails.add(e); } emailCur.close(); return (emails); } public ArrayList<Address> getContactAddresses(String id) { ArrayList<Address> addrList = new ArrayList<Address>(); String where = Contacts.ContactMethods.PERSON_ID + " = ? AND " + Contacts.ContactMethods.KIND + " = ?"; String[] whereParameters = new String[] { id, Contacts.ContactMethods.CONTENT_POSTAL_ITEM_TYPE }; Cursor addrCur = this.cr.query(Contacts.ContactMethods.CONTENT_URI, null, where, whereParameters, null); while (addrCur.moveToNext()) { String addr = addrCur.getString(addrCur .getColumnIndex(Contacts.ContactMethodsColumns.DATA)); String type = addrCur.getString(addrCur .getColumnIndex(Contacts.ContactMethodsColumns.TYPE)); Address a = new Address(addr, type); addrList.add(a); } addrCur.close(); return (addrList); } public ArrayList<IM> getIM(String id) { ArrayList<IM> imList = new ArrayList<IM>(); String where = Contacts.ContactMethods.PERSON_ID + " = ? AND " + Contacts.ContactMethods.KIND + " = ?"; String[] whereParameters = new String[] { id, Contacts.ContactMethods.CONTENT_IM_ITEM_TYPE }; Cursor imCur = this.cr.query(Contacts.ContactMethods.CONTENT_URI, null, where, whereParameters, null); if (imCur.moveToFirst()) { String imName = imCur.getString(imCur .getColumnIndex(Contacts.ContactMethodsColumns.DATA)); String imType = imCur.getString(imCur .getColumnIndex(Contacts.ContactMethodsColumns.TYPE)); if (imName.length() > 0) { IM im = new IM(imName, imType); imList.add(im); } } imCur.close(); return (imList); } public Organization getContactOrg(String id) { Organization org = new Organization(); String where = Contacts.ContactMethods.PERSON_ID + " = ?"; String[] whereParameters = new String[] { id }; Cursor orgCur = this.cr.query(Contacts.Organizations.CONTENT_URI, null, where, whereParameters, null); if (orgCur.moveToFirst()) { String orgName = orgCur.getString(orgCur .getColumnIndex(Contacts.Organizations.COMPANY)); String title = orgCur.getString(orgCur .getColumnIndex(Contacts.Organizations.TITLE)); if (orgName.length() > 0) { org.setOrganization(orgName); org.setTitle(title); } } orgCur.close(); return (org); } @Override public ContactNameList newContactNameList() { ContactNameList contactNames = new ContactNameList(); String id = ""; this.cur = this.cr.query(People.CONTENT_URI, null, null, null, null); if (this.cur.getCount() > 0) { while (cur.moveToNext()) { ContactName cn = new ContactName(); id = cur.getString(cur.getColumnIndex(People._ID)); cn.setId(id); cn.setDisplayName(cur.getString(cur .getColumnIndex(People.DISPLAY_NAME))); contactNames.addContactName(cn); } } cur.close(); return (contactNames); } @Override public ArrayList<String> getContactNotes(String id) { this.cur = this.cr.query(People.CONTENT_URI, null, People._ID + "=" + id, null, null); ArrayList<String> notes = new ArrayList<String>(); notes.add(cur.getString(cur.getColumnIndex(People.NOTES))); cur.close(); return notes; } @Override public ContactName getContactNameByID(String id) { ContactName cn = new ContactName(); this.cur = this.cr.query(People.CONTENT_URI, null, People._ID + "=" + id, null, null); if (this.cur.getCount() > 0) { while (cur.moveToNext()) { id = cur.getString(cur.getColumnIndex(People._ID)); cn.setId(id); cn.setDisplayName(cur.getString(cur .getColumnIndex(People.DISPLAY_NAME))); } } cur.close(); return cn; } }