为ContentAPI的实现,适用于android2.X版本。
package com.iteedu.www;
import java.util.ArrayList;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.provider.ContactsContract;
public class ContactAPISdk5 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,
ContactsContract.Contacts.CONTENT_URI));
}
public ContactList newContactList() {
ContactList contacts = new ContactList();
String id;
this.cur = this.cr.query(ContactsContract.Contacts.CONTENT_URI, null,
null, null, null);
if (this.cur.getCount() > 0) {
while (cur.moveToNext()) {
id = cur.getString(cur
.getColumnIndex(ContactsContract.Contacts._ID));
contacts.addContact(getContactByID(id));
}
}
cur.close();
return (contacts);
}
public Contact getContactByID(String id) {
Contact c = new Contact();
this.cur = this.cr.query(ContactsContract.Contacts.CONTENT_URI, null,
ContactsContract.Contacts._ID + "=" + id, null, null);
if (this.cur.getCount() > 0) {
while (cur.moveToNext()) {
id = cur.getString(cur
.getColumnIndex(ContactsContract.Contacts._ID));
c.setId(id);
c.setDisplayName(cur.getString(cur
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
if (Integer
.parseInt(cur.getString(cur
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 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(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[] { id }, null);
while (pCur.moveToNext()) {
phones.add(new Phone(
pCur.getString(pCur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)),
pCur.getString(pCur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE))));
}
pCur.close();
return (phones);
}
public ArrayList<Email> getEmailAddresses(String id) {
ArrayList<Email> emails = new ArrayList<Email>();
Cursor emailCur = this.cr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
new String[] { id }, null);
while (emailCur.moveToNext()) {
// This would allow you get several email addresses
Email e = new Email(
emailCur.getString(emailCur
.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)),
emailCur.getString(emailCur
.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)));
emails.add(e);
}
emailCur.close();
return (emails);
}
public ArrayList<String> getContactNotes(String id) {
ArrayList<String> notes = new ArrayList<String>();
String where = ContactsContract.Data.CONTACT_ID + " = ? AND "
+ ContactsContract.Data.MIMETYPE + " = ?";
String[] whereParameters = new String[] { id,
ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE };
Cursor noteCur = this.cr.query(ContactsContract.Data.CONTENT_URI, null,
where, whereParameters, null);
if (noteCur.moveToFirst()) {
String note = noteCur
.getString(noteCur
.getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE));
if (note.length() > 0) {
notes.add(note);
}
}
noteCur.close();
return (notes);
}
public ArrayList<Address> getContactAddresses(String id) {
ArrayList<Address> addrList = new ArrayList<Address>();
String where = ContactsContract.Data.CONTACT_ID + " = ? AND "
+ ContactsContract.Data.MIMETYPE + " = ?";
String[] whereParameters = new String[] {
id,
ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE };
Cursor addrCur = this.cr.query(ContactsContract.Data.CONTENT_URI, null,
where, whereParameters, null);
while (addrCur.moveToNext()) {
String poBox = addrCur
.getString(addrCur
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));
String street = addrCur
.getString(addrCur
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
String city = addrCur
.getString(addrCur
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
String state = addrCur
.getString(addrCur
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
String postalCode = addrCur
.getString(addrCur
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
String country = addrCur
.getString(addrCur
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
String type = addrCur
.getString(addrCur
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
Address a = new Address(poBox, street, city, state, postalCode,
country, type);
addrList.add(a);
}
addrCur.close();
return (addrList);
}
public ArrayList<IM> getIM(String id) {
ArrayList<IM> imList = new ArrayList<IM>();
String where = ContactsContract.Data.CONTACT_ID + " = ? AND "
+ ContactsContract.Data.MIMETYPE + " = ?";
String[] whereParameters = new String[] { id,
ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE };
Cursor imCur = this.cr.query(ContactsContract.Data.CONTENT_URI, null,
where, whereParameters, null);
if (imCur.moveToFirst()) {
String imName = imCur.getString(imCur
.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA));
String imType;
imType = imCur.getString(imCur
.getColumnIndex(ContactsContract.CommonDataKinds.Im.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 = ContactsContract.Data.CONTACT_ID + " = ? AND "
+ ContactsContract.Data.MIMETYPE + " = ?";
String[] whereParameters = new String[] { id,
ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE };
Cursor orgCur = this.cr.query(ContactsContract.Data.CONTENT_URI, null,
where, whereParameters, null);
if (orgCur.moveToFirst()) {
String orgName = orgCur
.getString(orgCur
.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA));
String title = orgCur
.getString(orgCur
.getColumnIndex(ContactsContract.CommonDataKinds.Organization.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(ContactsContract.Contacts.CONTENT_URI, null,
null, null, null);
if (this.cur.getCount() > 0) {
while (cur.moveToNext()) {
ContactName cn = new ContactName();
id = cur.getString(cur
.getColumnIndex(ContactsContract.Contacts._ID));
cn.setId(id);
cn.setDisplayName(cur.getString(cur
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
contactNames.addContactName(cn);
}
}
cur.close();
return (contactNames);
}
@Override
public ContactName getContactNameByID(String id) {
ContactName cn = null;
this.cur = this.cr.query(ContactsContract.Contacts.CONTENT_URI, null,
ContactsContract.Contacts._ID + "=" + id, null, null);
if (this.cur.getCount() > 0) {
// while (cur.moveToNext()) {
cur.moveToFirst();
id = cur.getString(cur
.getColumnIndex(ContactsContract.Contacts._ID));
if (id != null && !id.equals("")) {
cn = new ContactName();
cn.setId(id);
cn.setDisplayName(cur.getString(cur
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
}
// }
}
cur.close();
return cn;
}
}