ITEEDU

ContactAPISdk3

适用于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;
	}
}